人民币大小写转换-202010微盟笔试题目

人民币大小写转换-202010微盟笔试题目


解题思路:
主要是分析读法特点:
本题限制了人民币的金额大小,即小于1亿,我们可以根据人民币的读法将每个位置上的读法与每个位置上的数字分别用枚举法表示出来,然后根据读法(从高位到低位)一一映射;
需要注意的问题主要有以下方面:
1.高位为0,此时不读,需要从高位依次遍历,直到第一个不为0的最高位出现,记录其所在的位置的读法即units数组以及数字的大小写转换;
2.低位为0:
如果低位为0,且不为零的最低位置为万或者万以上(万+),则直接以万元结尾;
如果如果低位为0,且不为零的最低位置为万以下(万-),则直接以元结尾;

class Solution {
    public String number2CNMoney (double money) {
        // write code here
        //忽略小数部分
        money = (int)money;
        StringBuffer sbf = new StringBuffer();
        char[] data = new char[]{'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
        char[] units = new char[]{'元','拾','佰','仟','万','拾','佰','仟','亿'};
        int[] val = new int[9];
        int index = 0;
        while (index < 9 && money != 0){
            val[index++] = (int) (money % 10);
            money = money / 10;
        }
        int l = 0;
        while (l < 9 && val[l] == 0){
            l++;
        }
        if (l == 9){
            return "零元";
        }
        int r = 8;
        while (r >= l && val[r] == 0){
            r--;
        }
        for (int i = r; r >= l; r--){
            int da = val[i];
            sbf.append(data[da]);
            sbf.append(units[i]);
        }
        if (l >= 4)
            sbf.append("万元");
        else
            sbf.append("元");
        return sbf.toString();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值