华为-人民币转换

(java实现)


题目描述:

考试题目和要点:

1、中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。

2、中文大写金额数字到“元”为止的,在“元”之后,应写“整字,如532.00应写成“人民币伍佰叁拾贰元整”。在”角“和”分“后面不写”整字。

3、阿拉伯数字中间有“0”时,中文大写要写“零”字,阿拉伯数字中间连续有几个“0”时,中文大写金额中间只写一个“零”字,如6007.14,应写成“人民币陆仟零柒元壹角肆分“。
4、10应写作“拾”,100应写作“壹佰”。例如,1010.00应写作“人民币壹仟零拾元整”,110.00应写作“人民币壹佰拾元整”
5、十万以上的数字接千不用加“零”,例如,30105000.00应写作“人民币叁仟零拾万伍仟元整”

本题含有多组样例输入。

输入描述:

输入一个double数

输出描述:

输出人民币格式
示例1:

输入

151121.15
10012.02

输出

人民币拾伍万壹仟壹佰贰拾壹元壹角伍分
人民币壹万零拾贰元贰分

问题分析:

按4位数一组来分析;
同时要考虑特殊情况,如“整”、十万以上接千不用加“零”等。

相关知识:


算法实现:

参考代码:

import java.util.*;
public class Main {

    public static String[] num0 = { "","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        while (input.hasNext())
        {
            String line = input.nextLine();
            String[] str = line.split("\\.");
            long num = Long.parseLong(str[0]);
            int point = Integer.parseInt(str[1]);
            String res = "人民币";
            //处理整数部分
            long bil = num/100000000;
            if (bil > 0)
            {
                res = res + turnToRMB(bil) + "亿";
            }
            num %= 100000000;//num /= 100000000;
            long mil = num/10000;
            if (mil > 10)
            {
                res = res + turnToRMB(mil) + "万";
            }else if (mil>0)
            {
                res = res + turnToRMB(mil) + "万零";
            }
            num %= 10000;//num /= 10000;
            res = res + turnToRMB(num);

            if (bil>0 || mil>0 || num>0)
            {
                res += "元";
            }
            //处理小数部分
            if (0 == point)
            {
                res += "整";
            }else
            {
                int tmp = point/10;
                if (tmp > 0)
                {
                    res = res + num0[tmp] + "角";
                }
                tmp = point%10;
                if (tmp > 0)
                {
                    res = res + num0[tmp] + "分";
                }
            }
            System.out.println(res);
        }
    }
    public static String turnToRMB(long number)
    {
        String res = "";
        int num = (int)number;
        int k = num/1000;
        if (k > 0)
        {
            res = res + num0[k] + "仟";
        }
        num %= 1000;
        int h = num/100;
        if (h > 0)
        {
            res = res + num0[h] + "佰";
        }
        num %= 100;
        int t = num/10;
        if (k>0 && (0==h||0==t) && num>0)
        {
            res += "零";
        }
        num %= 10;
        if (t > 1)
        {
            res = res + num0[t] + "拾";
        }else if (1 == t)
        {
            res = res + "拾";
        }
        if (num > 0)
        {
            res = res + num0[num];
        }
        return res;
    }
}
全部评论

相关推荐

三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务