题解 | #人民币转换#

人民币转换

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

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextDouble()) { // 注意 while 处理多个 case
            double d = in.nextDouble();
            LogI("d:" + d);
            String chinese = changeToChinese(d);
            LogI("chinese:" + chinese);

            String unit = addUnit(chinese);
            LogI("unit:" + unit);
            String nozero = removeZero(unit);
            LogI("nozero:" + nozero);
            String noYishi = removeYiShi(nozero);
            LogI("noYishi:" + noYishi);
            String noZeroYuan = removeZeroYuan(noYishi);
            String fix =  addPreFixEndEndFix(noZeroYuan);

            LogI("fix:" + fix);

            System.out.print(fix);
        }
    }

    public static String changeToChinese(double d) {
        String strD = d + "";
        int indexPoint = strD.indexOf('.');
        if (indexPoint > -1 && indexPoint + 2 < strD.length()) {
            strD = strD.subSequence(0, indexPoint + 3).toString();
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < strD.length(); i++) {
            sb.append(getChineseCap(strD.charAt(i)));
        }
        return sb.toString();
    }

    public static String addUnit(String s) {
        int indexOfYuan = s.indexOf('.');
        StringBuilder sb = new StringBuilder(s);
        if (indexOfYuan + 2 < sb.length()) {
            sb.insert(indexOfYuan + 3, "分");
        }
        if (indexOfYuan + 1 < sb.length()) {
            sb.insert(indexOfYuan + 2, "角");
        }
        sb.replace(indexOfYuan, indexOfYuan + 1, "元");

        for (int i = indexOfYuan - 2; i >= 0; i--) {
            char c = sb.charAt(i);
            sb.insert(i + 1, getUnit(indexOfYuan - i));
            LogI(" addUnit c:" + c + " i " + i + " indexOfYuan:" + indexOfYuan);
        }
        return sb.toString();
    }

    public static String removeZero(String s) {
        int indexOfYuan = s.indexOf('元');
        StringBuilder sb = new StringBuilder(s);
        int findIndex = -1;
        if ((findIndex = sb.indexOf("零分")) > -1 ) {
            sb.delete(findIndex, findIndex + 2);
        }
        if ((findIndex = sb.indexOf("零角")) > -1 ) {
                sb.delete(findIndex, findIndex + 2);
            
        }

        for (int i = 0; i < indexOfYuan - 2; i++) {
            char c = sb.charAt(i);
            if (c == '零' && isUnit(sb.charAt(i + 1))) {
                if (sb.charAt(i + 1) == '万' || sb.charAt(i + 1) == '亿') {
                    continue;
                }
                sb.delete(i + 1, i + 2)  ;
                indexOfYuan -= 1;
            }
        }

  
   

        indexOfYuan = sb.indexOf("元");
        for (int i = 0; i < indexOfYuan - 2; i++) {
            char c = sb.charAt(i);
            if (c == '零' && sb.charAt(i + 1) == '零') {
                sb.delete(i + 1, i + 2);
                indexOfYuan -= 1;
            }
        }
        int index = -1 ;
        while((index = sb.indexOf("零万")) > -1)  {
            sb.delete(index, index + 1);
        }
        while((index = sb.indexOf("零亿")) > -1)  {
            sb.delete(index, index + 1);
        }
        while((index = sb.indexOf("亿万")) > -1)  {
            sb.delete(index+1, index + 2);
        }
        return sb.toString();
    }

    public static String removeYiShi(String s) {
        StringBuilder sb = new StringBuilder(s);
        int index = -1;
        while ((index = sb.indexOf("壹拾")) > -1) {
            sb.delete(index, index + 1);
        }

        return sb.toString();
    }

    public static String removeZeroYuan(String s) {
        StringBuilder sb = new StringBuilder(s);
        int index =  sb.indexOf("零元");
        if(index == 0 && sb.length() != 2) {
            sb.delete(index, index + 2);
        }
        if(index > 0) {
            sb.delete(index, index + 1);
        }
       

        return sb.toString();
    }


    public static String addPreFixEndEndFix(String s) {
        StringBuilder sb = new StringBuilder("人民币");
        sb.append(s);
        if (s.endsWith("元")) {
            sb.append("整");
        }
        return sb.toString();
    }
   
   
   
   
    
    public static String getChineseCap(char n) {
        switch (n) {
            case '0' :
                return "零";
            case '1' :
                return "壹";
            case '2' :
                return "贰";
            case '3' :
                return "叁";
            case '4' :
                return "肆";
            case '5':
                return "伍";
            case '6':
                return "陆";
            case '7':
                return "柒";
            case '8' :
                return "捌";
            case '9' :
                return "玖";
            case '.':
                return ".";
            default:
                return "";
        }
    }

    public static String getUnit(int l) {

        if (l > 0 && l % 9 == 0) return "亿";
        if (l > 8) {
            l = l % 8 ;
        }
        if (l > 0 && l % 5 == 0) return "万";
        if (l > 4) {
            l = l % 4 ;
        }

        switch (l) {
            case -2 :
                return "分";
            case -1 :
                return "角";
            case 1 :
                return "元";
            case 2 :
                return "拾";
            case 3 :
                return "佰";
            case 4:
                return "仟";
            case 5:
                return "万";
            case 9:
                return "亿";
            default:
                return "";
        }
    }

    public static Boolean isUnit(char c) {
        if (c == '分' || c == '角' || c == '元'
                || c == '拾' || c == '佰' || c == '仟'
                || c == '万' || c == '亿' ) {
            return true;
        }
        return false;

    }

    public static boolean onlyZero(String s) {
        if (s == null || s.length() <= 0) return false;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) != '0') return false;
        }
        return true;
    }

    public static void LogE(String msg) {
        System.out.println("Error:" + msg);
    }

    public static void LogI(String msg) {
        // System.out.println("Info:" + msg);
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务