题解 | #人民币转换#

人民币转换

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

思路:分整数部分和小数部分分别定义两个函数进行处理,处理完成后去掉多余的零。数字转换很简单,主要是处理单位的转换。大概就这样。Code:
import java.util.*;
public class RMBTransfer {
    static String[] unit = {"", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟"};
    static Map<Integer, String> numMap = new HashMap<>();
    static {
        numMap.put(0, "零");
        numMap.put(1, "壹");
        numMap.put(2, "贰");
        numMap.put(3, "叁");
        numMap.put(4, "肆");
        numMap.put(5, "伍");
        numMap.put(6, "陆");
        numMap.put(7, "柒");
        numMap.put(8, "捌");
        numMap.put(9, "玖");
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            String nStr = in.nextLine();
            String integer = nStr.split("\\.")[0];
            String decimal = nStr.split("\\.")[1];
            String sbStr = handleInt(integer);
            String sb1Str = handleDecimal(decimal);
            StringBuffer sb = new StringBuffer();
            if (sbStr.equals("人民币零") && !sb1Str.equals("")){
                sb.append("人民币").append(sb1Str);
            }else{
                sb.append(sbStr);
                if (sb1Str.equals("")){
                    sb.append("元整");
                }else{
                    sb.append("元").append(sb1Str);
                }
            }

            System.out.println(sb.toString().replace("零零零", "零").replace("零零", "零").replace("壹拾", "拾").replace("零亿", "亿").replace("零万", "万").replace("零元", "元").replace("元零", "元").replace("角零", "角"));
        }
    }
    private static String handleDecimal(String decimal) {
        String[] unit1 = {"角", "分"};
        StringBuffer sb = new StringBuffer();
        int len = decimal.length();
        if (decimal.equals("00")){
            return "";
        }
        for (int i = 0; i < len; i++) {
            int v = Integer.parseInt(decimal.charAt(i) + "");
            sb.append(numMap.get(v));
            if (v != 0){
                sb.append(unit1[i]);
            }
        }
        return sb.toString();
    }
    private static String handleInt(String integer) {
        if(integer == "0"){
            return "人民币";
        }
        int len = integer.length();
        StringBuffer sb = new StringBuffer("人民币");
        for (int i = 0; i < len; i++) {
            int v = Integer.parseInt(integer.charAt(i) + "");
            sb.append(numMap.get(v));
            if (v != 0 || len-i-1 == 4 && v == 0 || len-i-1 == 8 && v == 0){
                sb.append(unit[len - i - 1]);
            }

        }
        return sb.toString();
    }


}


全部评论

相关推荐

整顿职场的柯基很威猛:这种不可怕,最可怕的是夹在一帮名校里的二本选手,人家才是最稳的。
点赞 评论 收藏
分享
11-27 12:36
已编辑
门头沟学院 前端工程师
Apries:这个阶段来说,很厉害很厉害了,不过写的简历确实不是很行,优势删掉吧,其他的还行
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务