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

菜鸟学徒

金牌黑马

  • 黑马币:368

  • 帖子:1410

  • 精华:0

© 菜鸟学徒 金牌黑马   /  2015-8-27 12:25  /  2642 人查看  /  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 个回复

倒序浏览
这个题经常会被面试时让你做
回复 使用道具 举报
kevin986745zk 发表于 2015-8-27 12:49
这个题经常会被面试时让你做

你已经面试了?
回复 使用道具 举报

我已经工作了!
回复 使用道具 举报

你是黑马出来的?为什么技术分这么少?
回复 使用道具 举报
菜鸟学徒 发表于 2015-8-28 09:45
你是黑马出来的?为什么技术分这么少?

我不是黑马出来的,我是自己学的,然后自己找工作的!
回复 使用道具 举报
这道题,看好多牛人都说对零处理那部分用正则表达式是最简单的~
回复 使用道具 举报
SYAD 中级黑马 2015-8-28 14:54:36
8#
这个问题要考虑的问题很多呀,思路不清晰都不好动手
回复 使用道具 举报
{:2_30:}好厉害的样子拿下里
回复 使用道具 举报
kevin986745zk 发表于 2015-8-28 13:35
我不是黑马出来的,我是自己学的,然后自己找工作的!

好牛逼。。。
回复 使用道具 举报
三分之一 发表于 2015-8-28 14:22
这道题,看好多牛人都说对零处理那部分用正则表达式是最简单的~

我还没学到正则。。。只能这样处理了
回复 使用道具 举报
郭亚星 发表于 2015-8-28 15:28
好厉害的样子拿下里

还好,这题做了我几个小时
回复 使用道具 举报
郭亚星 发表于 2015-8-28 15:28
好厉害的样子拿下里

还好,这题做了我几个小时
回复 使用道具 举报
SYAD 发表于 2015-8-28 14:54
这个问题要考虑的问题很多呀,思路不清晰都不好动手

你可以先把不是零的做出来,然后再对零的单独处理。。
回复 使用道具 举报
有点略吊     看着头大
回复 使用道具 举报

你也可以做到,努力就好!
回复 使用道具 举报
kevin986745zk 发表于 2015-8-28 19:47
你也可以做到,努力就好!

那你现在做大数据在深圳又过万吧。。
回复 使用道具 举报
lcq0301 发表于 2015-8-28 19:36
有点略吊     看着头大

辛苦了我2个小时啊,多看会应该会看懂的。。
回复 使用道具 举报
菜鸟学徒 发表于 2015-8-28 19:51
辛苦了我2个小时啊,多看会应该会看懂的。。

脑壳疼。。。
回复 使用道具 举报
菜鸟学徒 发表于 2015-8-28 19:49
那你现在做大数据在深圳又过万吧。。

我在上海,目前没有做大数据,工资17K
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马