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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡团乐 中级黑马   /  2012-6-8 01:10  /  4426 人查看  /  7 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 胡团乐 于 2014-8-24 09:53 编辑

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

评分

参与人数 1黑马币 +20 收起 理由
黄奕豪 + 20 赞一个!

查看全部评分

7 个回复

倒序浏览
牛!!!!!!
回复 使用道具 举报
顶一个,楼主很厉害
回复 使用道具 举报
这是我的,给大家参考
  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. }
复制代码
回复 使用道具 举报
高一航 发表于 2013-1-4 12:25
这是我的,给大家参考

顶一个!! :)
回复 使用道具 举报
算法有问题,本来很简单的问题被你弄的太复杂了,拜托别把程序写的太复杂,好好读读算法吧
回复 使用道具 举报
{:soso_e113:}这道题,谁能吧万亿以后的也搞出来
回复 使用道具 举报
谢谢,学习学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马