黑马程序员技术交流社区

标题: 金币转换问题 [打印本页]

作者: q522464142    时间: 2015-8-29 22:08
标题: 金币转换问题
金额转换问题,阿拉伯数字转换成中文形式。例如:101000001010   转换为   壹仟零壹拾亿零壹仟零壹拾圆整


作者: cs13350    时间: 2015-8-29 22:08
用到了Map集合   代码不多    就一个for循环

Demo.zip

785 Bytes, 下载次数: 45


作者: 郭亚星    时间: 2015-8-29 22:27
/*
*需求: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);
        }
作者: liudongcan    时间: 2015-8-29 22:38
本帖最后由 liudongcan 于 2015-8-29 22:41 编辑

楼上大神给出答案了。还没时间做这样的东西





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