- /*
- *需求:25、金额转换,阿拉伯数字转换成中国传统形式。
- 例如:101000001010 转换为 壹仟零壹拾亿零壹仟零壹拾圆整
-
- 思路:1 用字符串类型接收用户输入,并转为char数组,对每个数字单独处理;
- 2 用两个表来处理数字,一个为基础的汉子数字表示表,一个为金钱的进制表
- 3 对零进行特殊处理
- */
- package Test;
- import java.util.Scanner;
- public class MoneyTransform {
- public static void main(String[] args) {
- getMoney1();
- }
-
- public static void getMoney1()
- {
- StringBuilder sb=new StringBuilder();
- Scanner sc =new Scanner(System.in);
- System.out.println("请输入要转换的金额:");
- String money=sc.nextLine().trim();//由于用户的数字输入不确定,用字符串接收
- char[] ch=money.toCharArray();
- char[] base={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
- char[] ch1={' ','拾','佰','仟','万','拾','佰','仟','亿'};
- for (int i = 0; i < ch.length; i++) {
- int idx=Integer.parseInt(new Character(ch[i]).toString());//获取每个数字,以便通过基础表得到汉子表示
- int id=(ch.length-1-i)/9==0?(ch.length-1-i):(ch.length-1-i)%9+1;//得到金额进制的匹配索引
- if(idx!=0)//对数字不是零的直接添加到字符串里
- {
- sb.append(base[idx]);
- sb.append(ch1[id]);
- }
- else
- {
- if(id==3||id==7)//千位为零继续循环,不打印
- continue;
- else if(id==4||id==8)//万,亿位是零
- {
- if(ch[i-1]=='0'&&ch[i-2]=='0'&&ch[i-2]=='0')//若万亿位前三位都是零,则打印零
- {
- sb.append(base[idx]);
- }
-
- else//否则打印万,亿
- sb.append(ch1[id]);
- }
- else if(id==2||id==6)//百位是零
- {
- if(ch[i-1]!='0'&&ch[i+1]!='0')//若千位与十位不为零,则打印零
- {
- sb.append(base[idx]);
- }
- }
- else if(id==1||id==5)//十位为零
- {
- if(ch[i+1]!='0')//若百位为零就打印零
- {
- sb.append(base[idx]);
- }
- }
- }
- }
- sb.append("圆整");
- String str=sb.toString().replace(" ", "");
- System.out.println(str);
- }
复制代码
|
|