A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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. }
复制代码



10 个回复

倒序浏览
本帖最后由 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
黑马的考试题有这么难吗??

额 有人抽到过  最后一题
回复 使用道具 举报
好难,同类型的题还有什么
回复 使用道具 举报
Yingwenming 来自手机 中级黑马 2015-9-21 14:30:08
地板
我有这题
回复 使用道具 举报
回复 使用道具 举报
meihua 中级黑马 2015-9-21 15:58:13
8#
是不是查表法啊
回复 使用道具 举报
不用正则表达式好难,折腾了好久还是不完美,
楼主的好像少了个零,101000001010 :壹仟零壹拾亿壹仟零壹拾圆整
正则表达式,做了些修改:
  1. s = s.replaceAll("零[拾百仟]", "零").replaceAll("零+","零");
  2. s = s.replaceAll("零([亿万])", "$1零").replaceAll("亿零万", "亿").replaceAll("零+","零").replaceAll("零+圆","圆");
复制代码
回复 使用道具 举报
确实比较难,看了下代码 主要难在判断0那里
回复 使用道具 举报
Ralap军 发表于 2015-9-21 23:04
不用正则表达式好难,折腾了好久还是不完美,
楼主的好像少了个零,101000001010 :壹仟零壹拾亿零 ...

谢谢  没注意到   万位级别为0时 添零   把出现 亿万 换成亿零应该也可以吧
s = s.replaceAll("零圆", "圆").replace("亿万", "亿零");
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马