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

菜鸟学徒

金牌黑马

  • 黑马币:368

  • 帖子:1410

  • 精华:0

© 菜鸟学徒 金牌黑马   /  2015-8-27 12:25  /  2647 人查看  /  43 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. /*
  2. *需求:25、金额转换,阿拉伯数字转换成中国传统形式。
  3.         例如:101000001010   转换为   壹仟零壹拾亿零壹仟零壹拾圆整
  4.        
  5.         思路:1        用字符串类型接收用户输入,并转为char数组,对每个数字单独处理;
  6.                 2        用两个表来处理数字,一个为基础的汉子数字表示表,一个为金钱的进制表
  7.                 3        对零进行特殊处理
  8. */

  9. package Test;

  10. import java.util.Scanner;

  11. public class MoneyTransform {

  12.         public static void main(String[] args) {
  13.                 getMoney1();
  14.         }
  15.        
  16.         public static void getMoney1()
  17.         {
  18.                 StringBuilder sb=new StringBuilder();
  19.                 Scanner sc =new Scanner(System.in);
  20.                 System.out.println("请输入要转换的金额:");
  21.                 String money=sc.nextLine().trim();//由于用户的数字输入不确定,用字符串接收
  22.                 char[] ch=money.toCharArray();
  23.                 char[] base={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
  24.                 char[] ch1={' ','拾','佰','仟','万','拾','佰','仟','亿'};
  25.                 for (int i = 0; i < ch.length; i++) {
  26.                         int idx=Integer.parseInt(new Character(ch[i]).toString());//获取每个数字,以便通过基础表得到汉子表示
  27.                         int id=(ch.length-1-i)/9==0?(ch.length-1-i):(ch.length-1-i)%9+1;//得到金额进制的匹配索引
  28.                         if(idx!=0)//对数字不是零的直接添加到字符串里
  29.                         {
  30.                                 sb.append(base[idx]);
  31.                                 sb.append(ch1[id]);
  32.                         }
  33.                         else
  34.                         {
  35.                                 if(id==3||id==7)//千位为零继续循环,不打印
  36.                                         continue;
  37.                                 else if(id==4||id==8)//万,亿位是零
  38.                                 {
  39.                                         if(ch[i-1]=='0'&&ch[i-2]=='0'&&ch[i-2]=='0')//若万亿位前三位都是零,则打印零
  40.                                         {
  41.                                                 sb.append(base[idx]);
  42.                                         }
  43.                                                
  44.                                         else//否则打印万,亿
  45.                                                 sb.append(ch1[id]);
  46.                                 }
  47.                                 else if(id==2||id==6)//百位是零
  48.                                 {
  49.                                         if(ch[i-1]!='0'&&ch[i+1]!='0')//若千位与十位不为零,则打印零
  50.                                         {
  51.                                                 sb.append(base[idx]);
  52.                                         }
  53.                                 }
  54.                                 else if(id==1||id==5)//十位为零
  55.                                 {
  56.                                         if(ch[i+1]!='0')//若百位为零就打印零
  57.                                         {
  58.                                                 sb.append(base[idx]);
  59.                                         }
  60.                                 }
  61.                         }
  62.                 }
  63.                 sb.append("圆整");
  64.                 String str=sb.toString().replace(" ", "");
  65.                 System.out.println(str);
  66.         }
复制代码


43 个回复

正序浏览
三分之一 发表于 2015-8-28 14:22
这道题,看好多牛人都说对零处理那部分用正则表达式是最简单的~

我今天刚刚学习正则,这两天的内容有点蒙~
回复 使用道具 举报
qt520 发表于 2016-1-21 08:26
厉害,还有高人出没

你也工作了吗?还是在培训呀?
回复 使用道具 举报
好厉害的样子,目前我是蒙圈了,求指点
回复 使用道具 举报
qt520 发表于 2016-1-21 08:26
厉害,还有高人出没

这哪算高手,闲的无聊写的。。。
回复 使用道具 举报
number0kaidi 发表于 2016-1-21 01:15
好牛啊...榜样就在身边...

加油,你也可以的。。。
回复 使用道具 举报
qt520 中级黑马 2016-1-21 08:26:42
39#
厉害,还有高人出没
回复 使用道具 举报 1 0
好牛啊...榜样就在身边...
回复 使用道具 举报
这种图,思路其实不难啊,就是查表法,代码量其实也不多,细心一点就好了
回复 使用道具 举报
kevin986745zk 发表于 2015-8-29 10:46
我在上海,目前没有做大数据,工资17K

屌炸天了 你是我的偶像啊
回复 使用道具 举报
anuo 中级黑马 2015-12-1 10:00:41
35#
看了半天,,,呵呵,没看懂。。。好忧伤
回复 使用道具 举报
袁有福123 发表于 2015-11-27 22:55
写的很好  步骤很清晰 赞

谢谢..........
回复 使用道具 举报
写的很好  步骤很清晰 赞
回复 使用道具 举报
我看到这个题首先是考虑的几十位数字的时候咋办  然后定义了一个不超过12位的数字来做的
回复 使用道具 举报
kevin986745zk 发表于 2015-8-29 10:46
我在上海,目前没有做大数据,工资17K

好吊!自学也可以这么厉害~~~
回复 使用道具 举报
bustle 发表于 2015-9-4 22:35
楼主&楼中的大神,请收下我的膝盖。

别,我还是小渣渣呢
回复 使用道具 举报
楼主&楼中的大神,请收下我的膝盖。
回复 使用道具 举报

据说正则更简单。。
回复 使用道具 举报

谢谢,我会加油的
回复 使用道具 举报
好复杂的样子
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马