题解 | #人民币转换#

人民币转换

https://www.nowcoder.com/practice/00ffd656b9604d1998e966d555005a4b

//其实这道题思路不难, 只是条件过程比较多, 花的时间比较多, 可能考试做不完, 所以定为 较难
//首先是处理小数点后面的, 要么多少元整, 要么几角几分, 但是要注意1.00变成字符串可能就是1.0需要添加一个0
//然后是四个一组的处理, 两个循环, 第一次循环四个一次, 会加上进位, (元,万,亿),但是<1就不能加上元
//数字直接用数组调用, 单位 个十百千,个不处理, 10的时候不能加入壹拾, 
//然后就是0的处理用一个后面是否为0即可

import java.util.Scanner;

public class Main
{
    public static void main(String[] args)
    {
//1、中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用
// 壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。
//2、中文大写金额数字到“元”为止的,在“元”之后,应写“整字,如532.00应写成“人民币伍佰叁拾贰元整”。
// 在”角“和”分“后面不写”整字。
//3、阿拉伯数字中间有“0”时,中文大写要写“零”字,阿拉伯数字中间连续有几个“0”时,中文大写金额中间只写一个“零”字,
// 如6007.14,应写成“人民币陆仟零柒元壹角肆分“。
//4、10应写作“拾”,100应写作“壹佰”。例如,1010.00应写作“人民币壹仟零拾元整”,110.00应写作“人民币壹佰拾元整”
//5、十万以上的数字接千不用加“零”,例如,30105000.00应写作“人民币叁仟零拾万伍仟元整”
        Scanner sc = new Scanner(System.in);
        double n = sc.nextDouble();
        String []shuzi = new String[]{"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
        String []jinwei = new String[]{ "元", "万","亿"};
        String []sigeyizu = new String[]{ "个","拾","佰","仟"};
        String res = "";
        //处理小数点后面的
        String str = ""+n;//123.00
        int xiaoshudian = str.indexOf(".");
        for (int i = 0; i < 2 - (str.length()-xiaoshudian-1); i++)
        {
            str =str+0;
        }
        
        if(str.charAt(str.length()-1)=='0' && str.charAt(str.length()-2)=='0')
        {
            res = res + "整";
        }
        else
        {
            char fen  = str.charAt(str.length()-1);
            char jiao = str.charAt(str.length()-2);
            int iFen  = fen - '0';
            int iJiao = jiao - '0';
            if(iFen!=0)
            {
                res =res+ shuzi[iFen]+ "分" ;
            }
            if(iJiao!=0)
            {
                res =  shuzi[iJiao] + "角"+res;
            }
        }
        if( n<1 )
        {
            res = "人民币"+res;
            System.out.println(res);
            return;
        }
        //15  1121.15   人民币拾伍万壹仟壹佰贰拾壹    元壹角伍分
        //处理小数点后面的
        int numJinwei = 0;
        boolean afteris0 = false;
        for (int i = str.length()-4 ; i >=0 ; i = i-4 )
        {
            res = jinwei[numJinwei] + res;
            numJinwei++;
            int danwei = 0;
            for (int j = i; j >i-4 && j>=0; j--)
            {
                char ch = str.charAt(j);
                int index = ch-'0';
                if( ch =='0' && !afteris0  )
                {
                    if(res.charAt(0) != '元')
                    {
                        res = shuzi[0]  +res;
                    }
                    afteris0 = true;
                    danwei++;
                    continue;
                }
                if(ch =='0' && afteris0)
                {
                    danwei++;
                    continue;
                }
                if(ch !='0' && afteris0)
                {
                    afteris0 = false;
                }

                if(danwei==0)
                {
                    res = shuzi[index]  +res;
                }
                else
                {
                    if(sigeyizu[danwei].equals("拾") && index==1)
                    {
                        res =  sigeyizu[danwei] +res;
                    }
                    else
                    {
                        res = shuzi[index] + sigeyizu[danwei] +res;
                    }

                }

                danwei++;
            }
        }
        res = "人民币"+res;
        System.out.println(res);

    }
}

全部评论

相关推荐

11-03 14:38
重庆大学 Java
AAA求offer教程:我手都抬起来了又揣裤兜了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务