黑马程序员技术交流社区

标题: ............ [打印本页]

作者: 胡团乐    时间: 2012-6-8 01:10
标题: ............
本帖最后由 胡团乐 于 2014-8-24 09:53 编辑

............

作者: 飞舞❤心动    时间: 2012-6-8 09:26
牛!!!!!!
作者: 雷云红    时间: 2012-6-8 10:20
顶一个,楼主很厉害
作者: 嘿嘿小学徒    时间: 2013-1-4 12:25
这是我的,给大家参考
  1. package com.itheima;

  2. public class Test10 {
  3.     /**
  4.      * @param 黑马程序员
  5.      *
  6.      * @author 高一航
  7.      */
  8.    
  9.     public static void main(String[] args) {
  10.         String money = "103070805040";   //需要转换的钱(103070805040比101000001010复杂写,便于测试)
  11.         System.out.println(convert(money)); //打印出结果
  12.     }

  13.     public static String convert(String money) {
  14.         
  15.         //下面两个字符数组,将阿拉伯数字和中国数字的大写 一一对应
  16.         char[] enNum = new char[] { '0', '1', '2', '3', '4', '5', '6', '7',
  17.                 '8', '9' };
  18.         char[] cnNum = new char[] { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒',
  19.                 '捌', '玖' };
  20.         char[] unit = new char[] { '仟', '0', '拾', '佰', '元', '万', '亿' };  //定义一个单位的字符数组,'0'只占个位置,没有特定的意义
  21.         for (int i = 0; i < enNum.length; i++) {   //将传入的阿拉伯汉字一一转换成中文大写数字
  22.             money = money.replace(enNum[i], cnNum[i]);
  23.         }
  24.         
  25.         // quotient定义了i除以4的商,remainder定义了余数
  26.         int quotient;
  27.         int remainder;
  28.         StringBuilder sb = new StringBuilder();//用于保存需要返回的结果
  29.         //从后向前遍历字符串中的每个数,放在i位置(个,十,百,千分别在1,2,3,4位置),index则指的是每个数在字符串中的下标
  30.         for (int i = money.length(), index = 0; i > 0; i--, index++) {  //每次循环i自减,index自增;
  31.             quotient = i / 4;  //判断这个数的数量级(万还是亿)
  32.             remainder = i % 4; //余数用于判断改数对应在unit字符数组中的单位;
  33.             if (money.charAt(index) == '零') {  //当读到0的情况比较复杂单独拿出来考虑
  34.                 if (remainder == 1) {  //读到的数是0,而且该数处在应该添加万,亿单位的位置上
  35.                     if (!money.substring(index - 3, index + 1).equals("零零零零")) { //判断之前没有出现过4个连续的0才添加万或者亿的单位
  36.                         sb.append(unit[4 + quotient]);
  37.                     }
  38.                 }
  39.                 continue; //添加完单位就应该跳出本次循环
  40.             }
  41.             
  42.             //当读取到的数不是第一个数,且之前的一个数不是0,还要保证不是'万','亿'单位后紧跟着的数,此时才可以添加'零'
  43.             if (i != money.length()&&remainder!=0 && money.charAt(index - 1) == '零') {
  44.                 sb.append('零');
  45.             }
  46.             sb.append(money.charAt(index)); //添加该不为零的数到字符串
  47.             
  48.             if (remainder == 1) {  //判断余数为1,就是应该添加'万','亿','元' 单位的时候了
  49.                 sb.append(unit[4 + quotient]); //添加对应的单位
  50.             }else{
  51.                 sb.append(unit[remainder]); //余数不为1则添加该数对应的'仟', '拾', '佰'单位
  52.             }
  53.         }
  54.         sb.append("整"); //最后添加个'整'
  55.         return sb.toString(); //返回给方法调用处;
  56.     }
  57. }
复制代码

作者: sun~~    时间: 2013-1-4 18:07
高一航 发表于 2013-1-4 12:25
这是我的,给大家参考

顶一个!! :)
作者: 韦振华    时间: 2013-3-29 03:56
算法有问题,本来很简单的问题被你弄的太复杂了,拜托别把程序写的太复杂,好好读读算法吧
作者: 范天成    时间: 2013-4-27 12:58
{:soso_e113:}这道题,谁能吧万亿以后的也搞出来
作者: 牛牛宝    时间: 2015-1-4 21:57
谢谢,学习学习




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