黑马程序员技术交流社区

标题: 黑马压轴题:金额转换,阿拉伯数字转换成中文传统数字. [打印本页]

作者: fmi110    时间: 2015-9-12 21:14
标题: 黑马压轴题:金额转换,阿拉伯数字转换成中文传统数字.
本帖最后由 fmi110 于 2015-9-12 21:32 编辑

a
  1. import java.util.Scanner;
  2. public class Test {
  3.         public static void main(String[] args) {
  4.                 long num = 101000001010l;
  5.                 String[] digit =        {"零","壹","貳","叁","肆","伍","陆","柒","扒","玖"};
  6.                 String[] unit =         {"整","圆","拾","百","仟","万","拾","百","仟","亿","拾","百","仟","万"};
  7.                 while(true){
  8.                         num = new Scanner(System.in).nextLong();
  9.                         char[] chArr = Long.toString(num).toCharArray();
  10.                         StringBuilder sb = new StringBuilder("");
  11.                         for(int i = 0;i < chArr.length;i++){
  12.                                  String s = digit[Integer.parseInt(String.valueOf(chArr[i]))];
  13.                                  String s2 = unit[chArr.length-i];
  14.                                  sb.append(s).append(s2);  
  15.                 }
  16.                 sb.append(unit[0]);
  17.                 String str = sb.toString();
  18.                 str = change(str);
  19.                 System.out.println(str);}
  20.         }
  21.         private static String change(String str) {
  22.                 String s = str.replaceAll("零[仟百拾]", "零");
  23.                 s = s.replaceAll("零+", "零").replaceAll("零亿", "亿").replaceAll("零万", "万");
  24.                 s = s.replaceAll("零圆", "圆").replace("亿万", "亿");
  25.                 return s;
  26.         }
  27. }
复制代码




作者: fmi110    时间: 2015-9-12 21:16
本帖最后由 fmi110 于 2015-9-12 21:22 编辑

运行结果
  1. 101000001010
  2. 壹仟零壹拾亿壹仟零壹拾圆整
  3. 1230193
  4. 壹百貳拾叁万零壹百玖拾叁圆整
  5. 1
  6. 壹圆整
  7. 10
  8. 壹拾圆整
  9. 100
  10. 壹百圆整
  11. 1000
  12. 壹仟圆整
  13. 10001
  14. 壹万零壹圆整
  15. 110000
  16. 壹拾壹万圆整
  17. 111000000
  18. 壹亿壹仟壹百万圆整
  19. 1000000001
  20. 壹拾亿零壹圆整
复制代码


作者: anyway1919    时间: 2015-9-12 22:22
黑马的考试题有这么难吗??
作者: fmi110    时间: 2015-9-12 23:12
anyway1919 发表于 2015-9-12 22:22
黑马的考试题有这么难吗??

额 有人抽到过  最后一题
作者: tianweidong    时间: 2015-9-21 13:56
好难,同类型的题还有什么
作者: Yingwenming    时间: 2015-9-21 14:30
我有这题
作者: 王贺明    时间: 2015-9-21 15:43

作者: meihua    时间: 2015-9-21 15:58
是不是查表法啊
作者: Ralap军    时间: 2015-9-21 23:04
不用正则表达式好难,折腾了好久还是不完美,
楼主的好像少了个零,101000001010 :壹仟零壹拾亿壹仟零壹拾圆整
正则表达式,做了些修改:
  1. s = s.replaceAll("零[拾百仟]", "零").replaceAll("零+","零");
  2. s = s.replaceAll("零([亿万])", "$1零").replaceAll("亿零万", "亿").replaceAll("零+","零").replaceAll("零+圆","圆");
复制代码

作者: forjunjian    时间: 2015-9-21 23:41
确实比较难,看了下代码 主要难在判断0那里
作者: fmi110    时间: 2015-9-22 07:46
Ralap军 发表于 2015-9-21 23:04
不用正则表达式好难,折腾了好久还是不完美,
楼主的好像少了个零,101000001010 :壹仟零壹拾亿零 ...

谢谢  没注意到   万位级别为0时 添零   把出现 亿万 换成亿零应该也可以吧
s = s.replaceAll("零圆", "圆").replace("亿万", "亿零");




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2