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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liang926 中级黑马   /  2014-8-14 00:40  /  1966 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 liang926 于 2014-8-16 00:14 编辑

例如:输入:1002
         输出:壹仟零贰

11 个回复

倒序浏览
中文转换非常简单,财务记账中常用到千位分隔计数法:从数字最右开始,每3位加一个逗号,比如1000000写成1,000,000。 这道题就用这个原理,从数字最右开始,每3位做一次转换
回复 使用道具 举报
看不懂,努力中。。。
回复 使用道具 举报
fantacyleo 发表于 2014-8-14 01:24
中文转换非常简单,财务记账中常用到千位分隔计数法:从数字最右开始,每3位加一个逗号,比如1000000写成1, ...

好吧,其实我一直不怎么明白这里,谢谢分享咯
回复 使用道具 举报
1其实吧跟我们做的哪个基础差不多啊,就是把数字转化成大写数字,具体代码请参照


import java.io.*;
import java.lang.String;

public class change
{
public static void main(String agrs[])
{
  //Money用于存放输入的金额数
  long Money=0;
  String Mon[]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
         
         String Mon1[]={"拾","佰","仟","万","拾万","百万","仟万","亿","拾亿","百亿","仟亿"},
         je[]=new String[30];//je[]数组用于存放数字金额被转换后的数字
         
         //n用于测试您是否有金额转换
         int n=agrs.length;
         
         if(n==0)
         System.out.println("请输入需要转换的金额:");
         
            //将输入的金额转化成long型的数据
         else
          {
            Money=Long.parseLong(agrs[n-1]);           
          }
          //bitt用于存放第几个需转换的金额数字,
          int bitt=0,j,k=-1,i=0;
         
          //转换过程
         while(Money!=0)
         {
          bitt=(int)(Money%10L);
           
          //计算出每个数字对应的大写值
          for(j=0;j<Mon.length;j++)
          {
            if(j==bitt)break;
          }
           
          //将相应的值存入je[]中
          if(k!=-1){je[i]=Mon1[k];i++;}
           je[i]=Mon[j];i++;            
           Money=Money/10;
          k++;
               if(Money==0)
                {
                 //输出转换后的金额
                 System.out.print("您输入的金额为:");
                 i--;
                 for(;i>=0;i--)
                 System.out.print(je[i]);
                }
               
       }
        
}
}





回复 使用道具 举报
希望可以帮到你
回复 使用道具 举报
你可以换个思想考虑,比如,把1换成大写的壹,依次对应,而大写的数字你可以先提前输入进去,然后检测到123……的时候,重新赋值过去
回复 使用道具 举报
nadax 中级黑马 2014-8-14 10:56:38
8#
你这个两个思路,用余数每次/10 比如97/10就是7 ,在除/10就是9 然后吧这2个转换。另外一种转成String,然后利用switch遍历整个字符串。
回复 使用道具 举报
董帅军 发表于 2014-8-14 08:52
1其实吧跟我们做的哪个基础差不多啊,就是把数字转化成大写数字,具体代码请参照

嗯嗯,谢谢了!
回复 使用道具 举报
楼上给的代码转换出来的结果不太符合阅读习惯,稍微做了下改变,可以转换一亿以内数字
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 System.out.print(ZhuanHuan(12345678));

  6.         }

  7.         // 数字转换,拆分
  8.         public static StringBuilder ZhuanHuan(long num)
  9.         {
  10.                 StringBuilder sb = new StringBuilder();
  11.                 if(num<10000)
  12.                 {
  13.                         sb=Siwei((int)num);
  14.                 }
  15.                 if((num>9999)&&(num<100000000))
  16.                 {
  17.                         sb.append(Siwei((int)(num/10000))).append("万").append(Siwei((int)(num%10000)));
  18.                 }
  19.                
  20.                 return sb;
  21.         }

  22.         // 反转数组
  23.         public static void reverseArray(int[] arr, int num)
  24.         {
  25.                 int tmp;
  26.                 for (int start = 0, end = num - 1; start < end; start++, end--)
  27.                 {
  28.                         tmp = arr[start];
  29.                         arr[start] = arr[end];
  30.                         arr[end] = tmp;
  31.                 }
  32.         }

  33.         // 四位数字读法
  34.         public static StringBuilder Siwei(int num)
  35.         {
  36.                 String Ge[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
  37.                 StringBuilder sb = new StringBuilder();
  38.                 int js = 0;
  39.                 int[] t = new int[4];
  40.                 while (num != 0)
  41.                 {
  42.                         t[js] = num % 10;
  43.                         num = num / 10;
  44.                         js++;
  45.                 }
  46.                 reverseArray(t, js);
  47.                 js = js - 1;
  48.                 // 假如截取的数字是4位数
  49.                 if (js == 3)
  50.                 {
  51.                         // 千位赋值
  52.                         sb.append(Ge[t[js - 3]]);
  53.                         sb.append("仟");
  54.                         // 判断百位值
  55.                         if (t[js - 2] != 0)
  56.                         {
  57.                                 sb.append(Ge[t[js - 2]]);
  58.                                 sb.append("佰");
  59.                                 if (t[js - 1] != 0)
  60.                                 {
  61.                                         sb.append(Ge[t[js - 1]]);
  62.                                         sb.append("拾");
  63.                                         if (t[js] != 0)
  64.                                         {
  65.                                                 sb.append(Ge[t[js]]);
  66.                                         }
  67.                                 } else
  68.                                 {
  69.                                         sb.append("零");
  70.                                 }
  71.                         } else
  72.                         {
  73.                                 sb.append("零");
  74.                                 if (t[js - 1] != 0)
  75.                                 {
  76.                                         sb.append(Ge[t[js - 1]]);
  77.                                         sb.append("拾");
  78.                                         if (t[js] != 0)
  79.                                         {
  80.                                                 sb.append(Ge[t[js]]);
  81.                                         }
  82.                                 } else
  83.                                 {
  84.                                         if (t[js] != 0)
  85.                                         {
  86.                                                 sb.append(Ge[t[js]]);
  87.                                         }
  88.                                 }
  89.                         }
  90.                 }

  91.                 // 判断截取数字是3位
  92.                 if (js == 2)
  93.                 {
  94.                         sb.append(Ge[t[js - 2]]);
  95.                         sb.append("佰");
  96.                         if (t[js - 1] != 0)
  97.                         {
  98.                                 sb.append(Ge[t[js - 1]]);
  99.                                 sb.append("拾");
  100.                                 if (t[js] != 0)
  101.                                 {
  102.                                         sb.append(Ge[t[js]]);
  103.                                 }
  104.                         } else
  105.                         {
  106.                                 sb.append("零");
  107.                                 if (t[js] != 0)
  108.                                 {
  109.                                         sb.append(Ge[t[js]]);
  110.                                 }
  111.                         }
  112.                 }
  113.                 // 判断截取数字是两位
  114.                 if (js == 1)
  115.                 {
  116.                         sb.append(Ge[t[js - 1]]);
  117.                         sb.append("拾");
  118.                         if (t[js] != 0)
  119.                         {
  120.                                 sb.append(Ge[t[js]]);
  121.                         }
  122.                 }

  123.                 // 判断截取数字是一位
  124.                 if (js == 0)
  125.                 {
  126.                         sb.append(Ge[t[js]]);
  127.                 }

  128.                 return sb;
  129.         }

  130. }
复制代码
回复 使用道具 举报
happymouse 发表于 2014-8-14 18:59
楼上给的代码转换出来的结果不太符合阅读习惯,稍微做了下改变,可以转换一亿以内数字
...

学习了,谢谢了!
回复 使用道具 举报
liang926 发表于 2014-8-14 21:43
学习了,谢谢了!

不客气,共同进步
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马