黑马程序员技术交流社区

标题: 金额转换题 [打印本页]

作者: 菜鸟学徒    时间: 2015-8-27 12:25
标题: 金额转换题
  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.         }
复制代码



作者: kevin986745zk    时间: 2015-8-27 12:49
这个题经常会被面试时让你做
作者: 菜鸟学徒    时间: 2015-8-27 20:57
kevin986745zk 发表于 2015-8-27 12:49
这个题经常会被面试时让你做

你已经面试了?
作者: kevin986745zk    时间: 2015-8-28 09:26
菜鸟学徒 发表于 2015-8-27 20:57
你已经面试了?

我已经工作了!
作者: 菜鸟学徒    时间: 2015-8-28 09:45
kevin986745zk 发表于 2015-8-28 09:26
我已经工作了!

你是黑马出来的?为什么技术分这么少?
作者: kevin986745zk    时间: 2015-8-28 13:35
菜鸟学徒 发表于 2015-8-28 09:45
你是黑马出来的?为什么技术分这么少?

我不是黑马出来的,我是自己学的,然后自己找工作的!
作者: 三分之一    时间: 2015-8-28 14:22
这道题,看好多牛人都说对零处理那部分用正则表达式是最简单的~
作者: SYAD    时间: 2015-8-28 14:54
这个问题要考虑的问题很多呀,思路不清晰都不好动手
作者: 郭亚星    时间: 2015-8-28 15:28
{:2_30:}好厉害的样子拿下里
作者: 菜鸟学徒    时间: 2015-8-28 19:28
kevin986745zk 发表于 2015-8-28 13:35
我不是黑马出来的,我是自己学的,然后自己找工作的!

好牛逼。。。
作者: 菜鸟学徒    时间: 2015-8-28 19:29
三分之一 发表于 2015-8-28 14:22
这道题,看好多牛人都说对零处理那部分用正则表达式是最简单的~

我还没学到正则。。。只能这样处理了
作者: 菜鸟学徒    时间: 2015-8-28 19:31
郭亚星 发表于 2015-8-28 15:28
好厉害的样子拿下里

还好,这题做了我几个小时
作者: 菜鸟学徒    时间: 2015-8-28 19:33
郭亚星 发表于 2015-8-28 15:28
好厉害的样子拿下里

还好,这题做了我几个小时
作者: 菜鸟学徒    时间: 2015-8-28 19:35
SYAD 发表于 2015-8-28 14:54
这个问题要考虑的问题很多呀,思路不清晰都不好动手

你可以先把不是零的做出来,然后再对零的单独处理。。
作者: lcq0301    时间: 2015-8-28 19:36
有点略吊     看着头大
作者: kevin986745zk    时间: 2015-8-28 19:47
菜鸟学徒 发表于 2015-8-28 19:28
好牛逼。。。

你也可以做到,努力就好!
作者: 菜鸟学徒    时间: 2015-8-28 19:49
kevin986745zk 发表于 2015-8-28 19:47
你也可以做到,努力就好!

那你现在做大数据在深圳又过万吧。。
作者: 菜鸟学徒    时间: 2015-8-28 19:51
lcq0301 发表于 2015-8-28 19:36
有点略吊     看着头大

辛苦了我2个小时啊,多看会应该会看懂的。。
作者: lcq0301    时间: 2015-8-28 19:56
菜鸟学徒 发表于 2015-8-28 19:51
辛苦了我2个小时啊,多看会应该会看懂的。。

脑壳疼。。。
作者: kevin986745zk    时间: 2015-8-29 10:46
菜鸟学徒 发表于 2015-8-28 19:49
那你现在做大数据在深圳又过万吧。。

我在上海,目前没有做大数据,工资17K
作者: 菜鸟学徒    时间: 2015-8-29 21:31
kevin986745zk 发表于 2015-8-29 10:46
我在上海,目前没有做大数据,工资17K

你开发几年了?17K很猛了哦,还是自学出来的
作者: 三分之一    时间: 2015-8-30 14:53
菜鸟学徒 发表于 2015-8-28 19:29
我还没学到正则。。。只能这样处理了

这也很牛了。。。膜拜~
作者: 菜鸟学徒    时间: 2015-8-30 21:11
三分之一 发表于 2015-8-30 14:53
这也很牛了。。。膜拜~

要相信自己,你也可以的。。
作者: kevin986745zk    时间: 2015-9-2 14:47
菜鸟学徒 发表于 2015-8-29 21:31
你开发几年了?17K很猛了哦,还是自学出来的

2年了,在上海,17K很正常,我还觉得低了
作者: 淡忘初学者    时间: 2015-9-2 15:25
写得很好,受教了
作者: 陈劲松    时间: 2015-9-2 16:33
好复杂的样子
作者: 菜鸟学徒    时间: 2015-9-2 21:56
淡忘初学者 发表于 2015-9-2 15:25
写得很好,受教了

谢谢,我会加油的
作者: 菜鸟学徒    时间: 2015-9-2 22:04
陈劲松 发表于 2015-9-2 16:33
好复杂的样子

据说正则更简单。。
作者: bustle    时间: 2015-9-4 22:35
楼主&楼中的大神,请收下我的膝盖。
作者: 菜鸟学徒    时间: 2015-9-4 23:03
bustle 发表于 2015-9-4 22:35
楼主&楼中的大神,请收下我的膝盖。

别,我还是小渣渣呢
作者: 231555849    时间: 2015-11-27 22:29
kevin986745zk 发表于 2015-8-29 10:46
我在上海,目前没有做大数据,工资17K

好吊!自学也可以这么厉害~~~
作者: JYcainiao    时间: 2015-11-27 22:41
我看到这个题首先是考虑的几十位数字的时候咋办  然后定义了一个不超过12位的数字来做的
作者: 袁有福123    时间: 2015-11-27 22:55
写的很好  步骤很清晰 赞
作者: 菜鸟学徒    时间: 2015-11-28 08:27
袁有福123 发表于 2015-11-27 22:55
写的很好  步骤很清晰 赞

谢谢..........
作者: anuo    时间: 2015-12-1 10:00
看了半天,,,呵呵,没看懂。。。好忧伤
作者: Weidan    时间: 2015-12-1 11:14
kevin986745zk 发表于 2015-8-29 10:46
我在上海,目前没有做大数据,工资17K

屌炸天了 你是我的偶像啊
作者: meihua    时间: 2015-12-1 13:04
这种图,思路其实不难啊,就是查表法,代码量其实也不多,细心一点就好了
作者: number0kaidi    时间: 2016-1-21 01:15
好牛啊...榜样就在身边...
作者: qt520    时间: 2016-1-21 08:26
厉害,还有高人出没
作者: 菜鸟学徒    时间: 2016-1-21 21:55
number0kaidi 发表于 2016-1-21 01:15
好牛啊...榜样就在身边...

加油,你也可以的。。。
作者: 菜鸟学徒    时间: 2016-1-21 21:56
qt520 发表于 2016-1-21 08:26
厉害,还有高人出没

这哪算高手,闲的无聊写的。。。
作者: ningshuilian    时间: 2016-5-29 22:47
好厉害的样子,目前我是蒙圈了,求指点
作者: ningshuilian    时间: 2016-5-29 22:48
qt520 发表于 2016-1-21 08:26
厉害,还有高人出没

你也工作了吗?还是在培训呀?
作者: ningshuilian    时间: 2016-5-29 22:49
三分之一 发表于 2015-8-28 14:22
这道题,看好多牛人都说对零处理那部分用正则表达式是最简单的~

我今天刚刚学习正则,这两天的内容有点蒙~




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