一道java基础面试题

yangdu328 2009-07-08 07:18:00
要求:输入阿拉伯数字的金额,显示为中文大写形式,如 105.00→一百零五元零角零分
...全文
134 21 打赏 收藏 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
a15208312800 2010-10-21
  • 打赏
  • 举报
回复
17楼,顶,健壮
「已注销」 2009-07-09
  • 打赏
  • 举报
回复
标记下来吧

xuhaitao5217 2009-07-09
  • 打赏
  • 举报
回复
17楼真神豆
java_yao 2009-07-09
  • 打赏
  • 举报
回复
up
junjun1984 2009-07-09
  • 打赏
  • 举报
回复
个人觉得把数字拆成LIST 然后弄个HASHMAP KEY为数字 value为对应的大写中文。然后用containsKey()去判断搜是否有值 有的话就get()出来。
ashutc 2009-07-09
  • 打赏
  • 举报
回复
这段代码

public class numToChRMB {
private static final String chs[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾" };
/** *//**
*
* @param money 金额数字串
* @return 金额中文大写
* 将输入数字串money分割成4位数,将四位数转换成金额大写后再加上单位("","万","亿")
*/
public static String numToRMB(String money) {
StringBuilder chRMB = new StringBuilder();
money=money.replaceAll("[,,]", "");//去除分隔符逗号

try {
double t = Double.parseDouble(money);
if (t < 0) {
System.out.println("金额不能是负的!");
throw new IllegalArgumentException("金额不能是负的!");
//return null;
}
} catch (NumberFormatException e) {
System.out.println("输入数据有误,请检查!");
throw new IllegalArgumentException("输入数据有误,请检查!");
//return null;
}
int dotPos = money.indexOf('.');
String strz;//截取整数部分
if(dotPos==-1) {
strz=money;
}
else {
strz=money.substring(0, dotPos);//整数部分
}
StringBuilder sb=new StringBuilder(strz);
while(sb.length()>=1&&sb.charAt(0)=='0') {// 去掉数前面多余的零
sb.deleteCharAt(0);
}
if(sb.length()==0) {//输入为‘0 0’的情况
return "零";
}
strz=sb.toString();
String cur="";
boolean zero=false;//记录是否应该加‘零’如 1,0000,0000,0001,读作 壹万亿零壹圆整
String temp;
String digits;//每次截取的最后四位数
while(strz.length()>0) {

if(strz.length()>=4) {
digits=strz.substring(strz.length()-4);
strz=strz.substring(0, strz.length()-4);
}
else {
digits=strz;
strz="";
}
temp=fourMaxChange(digits);
if(temp.equals("零")) {
if(cur.equals("亿")) {
chRMB.insert(0, "亿");
}
if (zero == true) {
if (!chRMB.substring(0, 1).equals("零"))
chRMB.insert(0, "零");
zero = false;
}
}
else {
temp += cur;
chRMB.insert(0, temp);
if (digits.charAt(0) == '0')
if (chRMB.length() >=1
&& !chRMB.substring(0, 1).equals("零"))
chRMB.insert(0, "零");
zero = true;
}
if(cur.equals("")) {//改变单位
cur="万";
}
else if(cur.equals("亿")) {
cur="万";
}
else cur="亿";

}
String strx;
if(dotPos!=-1) {//有小数
strx = money.substring(dotPos+1);
if (strx.length() > 2) {
System.out.println("金额只允许两位小数!");
throw new IllegalArgumentException("金额只允许两位小数!");
//return null;
}
int xiaoshu = Integer.parseInt(strx);//小数部分
if(xiaoshu==0||strx.length()==0) {
chRMB.append("圆整");//整
}
else
chRMB.append("圆");
if(strx.length()==1) {
chRMB.append(chs[xiaoshu]).append("分");
}
else {
if(xiaoshu/10!=0) {
chRMB.append(chs[xiaoshu/10]).append("角");
}
else {
chRMB.append("零");
}
if(xiaoshu%10!=0) {
chRMB.append(chs[xiaoshu%10]).append("分");
}
}
}
else {
chRMB.append("圆整");
}

return chRMB.toString();
}
/** *//**
*
* @param number 输入数字串
* @return 转换后的大写金额
* @throws NumberFormatException 不合法的数字
* 将最多四位整数转换成大写金额
*/
public static String fourMaxChange(String number)
throws NumberFormatException {// 将最多四位整数转换成大写金额
StringBuilder rs = new StringBuilder();
int money;
money = Integer.parseInt(number);
boolean zero = false;
if (money / 1000 != 0) {
zero = true;
rs.append(chs[money / 1000]).append("仟");
money %= 1000;
}
if (money / 100 != 0) {
zero = true;
rs.append(chs[money / 100]).append("佰");
money %= 100;
} else if (zero == true) {
rs.append(chs[0]);// 零
money %= 100;
}
if (money / 10 != 0) {
zero = true;
rs.append(chs[money / 10]).append("拾");
money %= 10;
} else if (zero == true && !rs.substring(rs.length() - 1).equals("零")) {
rs.append(chs[0]);// 零
money %= 10;
}
if (money != 0) {
zero = true;
rs.append(chs[money]);
} else if (zero == true && rs.substring(rs.length() - 1).equals("零")) {
rs.delete(rs.length() - 1, rs.length());
}
if (zero == true)
return rs.toString();
else
return chs[0];//零
}
public static void main(String[] args) {
System.out.println(numToRMB("12,0000,0000,0403,0012,0000.02"));
}
}
henry_fuzr 2009-07-09
  • 打赏
  • 举报
回复
toString 然后length();
henry_fuzr 2009-07-09
  • 打赏
  • 举报
回复
应该先得到位数撒
lulu0126 2009-07-09
  • 打赏
  • 举报
回复
mark
iambrightdu 2009-07-09
  • 打赏
  • 举报
回复
差不多这个样子的,3位数,只写了整数部分,没解决0的话省略“十”的问题,反正差不多这个意思啦。

class  Alpha2Chinese
{
public char Number2Chn(int SingleNumber){
char Chn;
switch (SingleNumber)
{
case 1: Chn='一';break;
case 2: Chn='二';break;
case 3: Chn='三';break;
case 4: Chn='四';break;
case 5: Chn='五';break;
case 6: Chn='六';break;
case 7: Chn='七';break;
case 8: Chn='八';break;
case 9: Chn='九';break;
case 0: Chn='零';break;
default: Chn='错';break;
}
return Chn;
}

public void ScreenOut(int InputNumber){
System.out.println(Number2Chn(InputNumber/100)+"十");
if (InputNumber>999)
{
System.out.println("Sorry, your input is unlegal");
}
else if (InputNumber>99)
{
System.out.println(Number2Chn(InputNumber/100)+"百"
+Number2Chn((InputNumber%100)/10)+"十"
+Number2Chn(InputNumber%10));
}
else if (InputNumber>9)
{
System.out.println(Number2Chn((InputNumber%100)/10)+"十"
+Number2Chn(InputNumber%10));
}
else
{
System.out.println(Number2Chn(InputNumber));
}
}

public static void main(String[] args)
{
Alpha2Chinese AC = new Alpha2Chinese();
AC.ScreenOut(108);
}
}
361719298 2009-07-08
  • 打赏
  • 举报
回复
一般这种问题都是 小商店的购物系统用 所以只要求小数点后两位
1)将105.00(****.**)乘以100
2)强制转换成整型
3)求余10 取到最低位,用变量保存(如:存到X中)
4)除以10,去掉最低位 做成循环 直到除尽
5)创建一个输出汉字的类
用switch(X)来做
guohui800711 2009-07-08
  • 打赏
  • 举报
回复
new HashMap();
把1--9放到HashMap里。
循环截取 输入的字符,从0位开始到最后。
然后把 值从map里匹配出来。
然后循环拼成中文串就好了。
我还是建议楼主,自己能思考思考,方法有很多。
我这个就当做抛砖引玉了。
javaee_ssh 2009-07-08
  • 打赏
  • 举报
回复
老张-AI 2009-07-08
  • 打赏
  • 举报
回复
学习了
filemon 2009-07-08
  • 打赏
  • 举报
回复
是要用Java写吗?这个似乎很简单吧。我们大一时计算机基础课时,用VFP就做了这个题的。
就是用数组分拆,转换就OK了。貌似就是一楼那样,用什么语言实现都可以。
Golubo 2009-07-08
  • 打赏
  • 举报
回复
thanks guy~improve~
Asinzy 2009-07-08
  • 打赏
  • 举报
回复
仿造ta的js代码写一个好了
bigbug9002 2009-07-08
  • 打赏
  • 举报
回复
105.00→一百零五元零角零分
是不是应该:
一百零五元整 ?
xinguo123 2009-07-08
  • 打赏
  • 举报
回复
没怎么看懂!
没有昵称阿 2009-07-08
  • 打赏
  • 举报
回复
这么难啊!
加载更多回复(1)

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧