首页 > 试题广场 >

人民币转换

[编程题]人民币转换
  • 热度指数:78226 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

考试题目和要点:

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

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

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



输入描述:

输入一个double数



输出描述:

输出人民币格式

示例1

输入

151121.15

输出

人民币拾伍万壹仟壹佰贰拾壹元壹角伍分
示例2

输入

1010.00

输出

人民币壹仟零拾元整
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    private static final String[] nums = new String[] {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾"};

    private static final String[] units = new String [] { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿"};

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String input = in.nextLine();
        String [] instr = input.split("\\.");
        System.out.println("人民币" + handleHeader(instr[0]) + handleFooter(
                               instr[1]));
    }

    public static String handleHeader(String str) {
        if (str.equals("0")) {
            return "";
        }
        int curr = str.length() - 1;
        int i = 0;
        String result = "";
        while (curr >= 0) {
            String num = nums[Integer.parseInt(str.charAt(curr) + "")];
            String unit = units[i];
            if (unit.equals("拾") && num.equals("壹")) {
                num = "";
            }
            if (num.equals("零")) {
                if (!unit.equals("万") && !unit.equals("亿") && !unit.equals("")) {
                    unit = "";
                } else {
                    num = "";
                }
            }
            result = num + unit + result;
            curr--;
            i++;
        }
        return result
               .replaceAll("零零零万", "")
               .replaceAll("零零零", "零")
               .replaceAll("零零", "零")
               .replaceAll("零万", "万")
               .replaceAll("零亿", "亿")
               + "元";
    }

    public static String handleFooter(String str) {
        if (str.equals("00")) {
            return "整";
        }
        String jiao = nums[Integer.parseInt(str.charAt(0) + "")];
        String fen = nums[Integer.parseInt(str.charAt(1) + "")];
        if (jiao.equals("零")) {
            return fen + "分";
        }
        if (fen.equals("零")) {
            return  jiao + "角";
        }
        return jiao + "角" + fen + "分";
    }

}

编辑于 2023-12-11 15:41:07 回复(0)
import java.util.Scanner;
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        Map<Integer, String> numMap = new HashMap<>();
        Map<Integer, String> unitMap = new HashMap<>();
        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, "玖");
        numMap.put(0, "零");
        unitMap.put(1, "拾");
        unitMap.put(2, "佰");
        unitMap.put(3, "仟");
        unitMap.put(5, "万");
        unitMap.put(9, "亿");

        String money = in.nextLine();
        String[] arr = money.split("\\.");
        char[] intChs = arr[0].toCharArray();//整数
        int len = intChs.length;
        StringBuffer sb = new StringBuffer();
        sb.append("人民币");
        //整数为0不显示‘元’
        if (!"0".equals(arr[0])) {
            //处理整数
            for (int i = len; i > 0; i--) {
                int num = intChs[len - i] - '0';
                String cha = numMap.get(num);
                sb.append(cha);
                if ((i - 1) % 4 == 0 && (i - 1) > 0) { //单位:万、亿
                    String unit = "";
                    if (i > 12) { //万亿
                        unit = unitMap.get(i - 8);
                    } else {
                        unit = unitMap.get(i);
                    }
                    sb.append(unit);
                } else if ((i - 1) > 0 && num != 0) { //单位:十、百、千
                    String unit = unitMap.get((i - 1) % 4);
                    sb.append(unit);
                }
            }
            sb.append("元");
        }

        //处理小数点后
        if (arr.length > 1) {
            char[] diciChs = arr[1].toCharArray();
            if (diciChs[0] == '0' && diciChs[1] == '0') {
                sb.append("整");
            } else if (diciChs[0] == '0') {
                sb.append(numMap.get(diciChs[1] - '0') + "分");
            } else {
                sb.append(numMap.get(diciChs[0] - '0') + "角");
                if (diciChs[1] != '0') {
                    sb.append(numMap.get(diciChs[1] - '0') + "分");
                }
            }
        } else {
            sb.append("整");
        }


        String res = sb.toString().replaceAll("[零]+", "零").replace("零亿",
                     "亿").replace("零万", "万")
                     .replace("零元", "元").replace("壹拾", "拾");
        System.out.println(res);
    }
}
发表于 2023-09-22 15:50:13 回复(0)
import java.util.HashMap;
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        StringBuilder RMB_ZH = new StringBuilder();
        RMB_ZH.append("人民币");
        String[] groupUnit = {"亿万亿", "万万亿", "万亿", "亿", "万", "元"};
        String[] groupInnerUnit = {"仟", "佰", "拾", ""};
        String[] numZh = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
        String[] decimalUnit = {"角", "分", "厘", "毫"};

        // 待处理字符
        String num = scanner.nextLine();

        // 按 . 拆分成两部分
        // 处理小数部分的标识
        boolean decimalHandleFlag = num.contains(".");
        String[] parts = num.split("\\.");
        StringBuilder intPart = new StringBuilder(parts[0]);
        String decimalPart = decimalHandleFlag ? parts[1] : null;

        //获取总组数
        int totalGroup = (intPart.length() + 3) / 4;

        // 字符填充,将整个串设置为4的整倍数
        int remain = intPart.length() % 4;
        int paddingNum = remain == 0 ? 0 : 4 - remain;
        for (int i = 0; i < paddingNum; i++) {
            intPart.insert(0, "*");
        }

        // ------------------------ 处理整数部分 ----------------------------------------
        // 分组切分序号
        int partIdx = 0;
        // 按组处理整数部分
        for (int i = groupUnit.length - totalGroup; i < groupUnit.length; i++) {
            String group = intPart.substring(partIdx * 4, (partIdx + 1) * 4);
            String partBuffer = "";
            for (int idx = 0; idx < group.length(); idx++) {
                char c = group.charAt(idx);
                if (c == '*') {
                    continue;
                }

                // 保证在千 百 拾之前不会出现“零”
                String unit = idx < 3 && c == '0' ? "" : groupInnerUnit[idx];
                String numStr = c == '1' && unit.equals(groupInnerUnit[2]) ? "" : numZh[c - '0'];
                partBuffer = partBuffer + numStr + unit;
            }

            // 处理以”零”开头
            if (partBuffer.startsWith("零零零零")) {
                partBuffer = partBuffer.replaceFirst("零零零零", "");
            } else if (partBuffer.startsWith("零零零")) {
                partBuffer = partBuffer.replaceFirst("零零零", "零");
            } else if (partBuffer.startsWith("零零")) {
                partBuffer = partBuffer.replaceFirst("零零", "零");
            }

            //

            // 处理已”零“结尾的字符
            while (true) {
                if (partBuffer.endsWith(numZh[0])) {
                    partBuffer = partBuffer.substring(0, partBuffer.length() - 1);
                } else {
                    break;
                }
            }


            // 如果该组没有字符串则不进行拼接
            if (partBuffer.length() > 0) {
                RMB_ZH.append(partBuffer);
                RMB_ZH.append(groupUnit[i]);
            }

            // 处理下一组
            partIdx++;
        }

        // -----------------------------处理小数部分------------------------------------
        if (decimalHandleFlag) {
            for (int i = 0; i < decimalPart.length(); i++) {
                char c = decimalPart.charAt(i);
                if (!(c == '0')) {
                    RMB_ZH.append(numZh[c - '0']).append(decimalUnit[i]);
                }
            }
        } else {
            RMB_ZH.append("整");
        }

        System.out.println(RMB_ZH);
    }
}

发表于 2023-08-11 01:32:05 回复(0)
import java.io.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args)throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;
        while ((str = br.readLine()) != null) {
            String[] strArr = str.split("\\.");
            int num1 = Integer.parseInt(strArr[0]);
            int num2 = Integer.parseInt(strArr[1]);
            // 小数部分为0
            if (num2 == 0) System.out.println("人民币" + cul1(num1) + "元整");
            // 整数部分为0
            else if (num1 == 0) System.out.println("人民币" + cul2(strArr[1]));
            // 整数小数部分都不为0
            else System.out.println("人民币" + cul1(num1) + "元" + cul2(strArr[1]));
        }
    }
    private static String[] flag = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾"};
    // 整数部分处理
    private static String cul1(int num) {
        String res = "";
        //个位
        if (0 <= num && num <= 10) res = flag[num];
        // 十位
        else if (10 < num && num < 20) {
            int x = num % 10;
            res = "拾" + flag[x];
            // 十位
        } else if (20 <= num && num < 100) {
            int x = num % 10;
            int y = num / 10;
            if (x == 0) res = flag[y] + "拾";
            else res = flag[y] + "拾" + flag[x];
            //百位
        } else if (100 <= num && num < 1000) {
            int x = num % 100;
            int y = num / 100;
            // 如100
            if (x == 0) res = flag[y] + "佰";
            // 如101
            else if (x < 10) res = flag[y] + "佰零" + cul1(x);
            // 如111
            else res = flag[y] + "佰" + cul1(x);
            // 千位
        } else if (1000 <= num && num < 10000) {
            int x = num % 1000;
            int y = num / 1000;
            // 如1000
            if (x == 0) res = flag[y] + "仟";
            // 如1001
            else if (x < 100) res = flag[y] + "仟零" + cul1(x);
            // 如1111
            else res = flag[y] + "仟" + cul1(x);
            // 万位
        } else if (10000 <= num && num < 100000000) {
            int x = num % 10000;
            int y = num / 10000;
            // 如10000000
            if (x == 0) res = cul1(y) + "万";
            // 如10000100
            else if (x < 1000) res = cul1(y) + "万零" + cul1(x);
            // 如10001000
            else res = cul1(y) + "万" + cul1(x);
            // 亿位
        } else if (1000000000 <= num) {
            int x = num % 100000000;
            int y = num / 100000000;
            // 如10000000000
            if (x == 0) res = cul1(y) + "亿";
            // 如10001000000
            else if (x < 10000000) res = cul1(y) + "亿零" + cul1(x);
            // 如10010000000
            else res = cul1(y) + "亿" + cul1(x);
        }
        return res;
    }
    // 小数部分处理
    private static String cul2(String str) {
        char[] ch = str.toCharArray();
        // 角为0,返回分
        if (ch[0] == '0') return flag[Integer.parseInt(String.valueOf(ch[1]))] + "分";
        // 分为0,返回角
        else if (ch[1] == '0') return flag[Integer.parseInt(String.valueOf( ch[0]))] + "角";
        // 都不为0,返回角+分
        else  return flag[Integer.parseInt(String.valueOf(ch[0]))] + "角" + flag[Integer.parseInt(String.valueOf(ch[1]))] + "分";
    }
}

发表于 2023-07-13 15:15:13 回复(0)
public static String getNameByNum(int numInt,String qflag,String flag){
        StringBuffer bf = new StringBuffer();
        if(flag.equals("0")){//计算角分
            int jiao = numInt/10;
            int fen = (int)(numInt%10);
            if(jiao+fen==0){
                return "整";
            }
            if(jiao==0){
                // bf.append(getName(jiao));
            }else{
                bf.append(getName(jiao)).append("角");
            }
            if(fen!=0){
                bf.append(getName(fen)).append("分");
            }else{
           
            }
        }else{
            if(numInt<10000){//9876
               int jq = (int)(numInt/1000);//9
               int jb = (int)(numInt%1000/100);//8
               int js = (int)(numInt%1000%100/10);//7
               int jy = (int)(numInt%1000%100%10);//6
               if(qflag.equals("0")){
                //   bf.append(getName(0));
               }
               if(jq>0){
                    bf.append(getName(jq)).append("仟");
                    if(jb==0&&(js!=0||jy!=0)){
                        bf.append("零");
                    }
               }
               if(jb>0){
                    bf.append(getName(jb)).append("佰");
               }
               if(js>0){
                if(js!=1){
                    bf.append(getName(js));
                }
                    bf.append("拾");
               }
               if(jy>0){
                    bf.append(getName(jy));
               }
            }
        }
        return bf.toString();
    }
    public static String getName(int num){
        String ret = "";
        if(num==0){
            ret = "零";
        }else if(num==1){
            ret = "壹";
        }else if(num==2){
            ret = "贰";
        }else if(num==3){
            ret = "叁";
        }else if(num==4){
            ret = "肆";
        }else if(num==5){
            ret = "伍";
        }else if(num==6){
            ret = "陆";
        }else if(num==7){
            ret = "柒";
        }else if(num==8){
            ret = "捌";
        }else if(num==9){
            ret = "玖";
        }
        return ret;
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            double a = in.nextDouble();
            String aa = String.valueOf(a);
            String[] aaStrs = aa.split("\\.");
            String yuan = aaStrs[0];
            String jf = aaStrs[1];
            if(jf.length()<2){
                while(jf.length()<2){
                    jf = jf.concat("0");
                }
            }
            StringBuffer bf = new StringBuffer("人民币");
            long yuanLong = Long.parseLong(yuan);
            if(yuanLong>Math.pow(10,8)){//大于一个亿,2012345678
              int jy = (int)(yuanLong/Math.pow(10,8));//多少亿 20
              int jyl = (int)(yuanLong%Math.pow(10,8));//12345678

               int qw = (int)(jyl/10000);//多少千瓦
                int qy = (int)(jyl%10000);//多少千
                String strqw = getNameByNum(qw,"1","1");
                String strqy = getNameByNum(qy,"0","1");

              bf.append(jy).append("亿").append(strqw).append("万").append(strqy).append("元");
            }else if(yuanLong>10000){
                int qw = (int)(yuanLong/10000);//多少千瓦
                int qy = (int)(yuanLong%10000);//多少千
                String qflag = "1";
                String strqw = getNameByNum(qw,"0","1");
                String strqy = getNameByNum(qy,"0","1");
                bf.append(strqw).append("万").append(strqy).append("元");
            }else{              
                if(yuanLong>0){
                    String str = getNameByNum((int)yuanLong,"1","1");
                    bf.append(str).append("元");
                }
            }
             String strf = getNameByNum(Integer.parseInt(jf),"0","0");
             bf.append(strf);
            System.out.println(bf.toString());
        }
    }
发表于 2023-04-19 21:11:48 回复(0)
import java.util.*;
import java.math.*;
// by-xiaxiaonan 这题属实离谱!!!
public class Main {
    public static String[] geWei = new String[] {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String[] nums = in.nextLine().trim().split("\\."); //小数点分割
        long numL = Long.valueOf(nums[0]); //整数部分
        int jiaoFen = Integer.valueOf(nums[1]);//小数部分
        String rs = "人民币";
        String numLstr = getStrByNum(numL); //获得整数部分字符串
        rs += numLstr;
        if (jiaoFen == 0) {
            rs += "整";
        } else {
            int jiao = jiaoFen / 10;
            int fen = jiaoFen % 10;
            if (jiao != 0) {
                rs += geWei[jiao] +
                      "角";   //这里系统判定角为0,分不为0时,不加零
            }                               //离谱!!!你不在题目里说,就靠我自己测?
            if (fen != 0) {
                rs += geWei[fen] + "分";
            }
        }
        System.out.print(rs);
    }
    //获得4位及以下数字的中文字符串
    public static String getStrByNum4(int num) {
        String rs = "";
        int qian = num / 1000;      //千位
        int bai = num / 100 % 10;   //百位
        int shi = num / 10 % 10;    //十位
        int ge = num % 10;          //个位
        if (qian != 0) {
            rs += geWei[qian] + "仟";
            if (bai == 0 && (shi != 0 || ge != 0)) {
                rs += "零"; //当千位不为零,百位为零,且个、十位至少一个为0
            }
        }
        if (bai != 0) {
            rs += geWei[bai] + "佰";
            if (shi == 0 && ge != 0) {
                rs += "零"; ////当百位不为零,十位为0,个位不为0
            }
        }
        if (shi != 0) {
            if (shi != 1) {
                rs += geWei[shi] + "拾";
            } else {
                rs += "拾";
            }
        }
        if (ge != 0) {
            rs += geWei[ge];
        }
        return rs;
    }
    public static String getStrByNum(long num) {
        String rs = "";
        int numY = (int)((num / 100000000) % 10000);//取出亿级及以上的四位数
        int numW = (int)((num / 10000) % 10000);    //取出万级至亿级的四位数
        int numw = (int)(num % 10000);              //取出万级以下的四位数,个位~千位
        if (numY != 0) {            
            rs += getStrByNum4(numY) + "亿";
            if (0 < numW && numW < 1000) {       //万级至亿级的四位数的值在0~1000时亿级后需加零
                rs += "零";
            } else if (numW == 0 && numw != 0) { //万级至亿级的四位数的值为0,且万级以下的四位数不为零
                rs += "零";
            }
        }
        if (numW != 0) {
            rs += getStrByNum4(numW) + "万";
            if (0 < numw && numw < 1000) {        //万级以下的四位数的值在0~1000时万级后需加零
                rs += "零";
            }
        }
        if (numw != 0) {
            rs += getStrByNum4(numw);
        }
        if (rs.length() != 0) {                  //考虑整数部分为零的情况
            rs += "元";
        }
        return rs;
    }
}
发表于 2023-04-15 00:15:05 回复(2)
import java.util.*;
import java.lang.*;
import java.math.*;

public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext()){
            String num = scanner.next();
            String result = "人民币";
            int data1 = Integer.parseInt(num.split("\\.")[0]);
            int data2 = Integer.parseInt(num.split("\\.")[1]);

            if(data1 == 0){
                if(data2 == 0){
                    System.out.println(result + "零元");
                    continue;
                }else if(data2 == 10){
                    System.out.println(result + change(data2/10) + "角");
                    continue;
                } else if(data2 > 10) {
                    System.out.println(result + change(data2/10) + "角" + change(data2%10) + "分");
                    continue;
                }else{
                    System.out.println(result + change(data2) + "分");
                    continue;
                }
            }else{
                if(data2 == 0){
                    System.out.println(result + compute(data1) + "整");
                    continue;
                }else if(data2 == 10) {
                    System.out.println(result+ compute(data1) + change(data2/10) + "角");
                }else if(data2 >10){
                    if(data2%10 == 0){
                        System.out.println(result + compute(data1) + change(data2/10) + "角" );
                    }else{
                        System.out.println(result + compute(data1) + change(data2/10) + "角" + change(data2%10) + "分");
                    }
                    
                    continue;
                }else {
                    System.out.println(result + compute(data1) + change(data2%10) + "分");
                    continue;
                }
            }
        }
    }
    public static String compute(int a){
        String data = String.valueOf(a);
        int turns = data.length()%4 == 0? data.length()/4 : data.length()/4+1;
        String result = "";
        for (int i= 0;i < turns;i++) {
            String temp="";
            if(i==0){
                temp = qian(data.substring(0,data.length()-(turns-1)*4));
            }else{
                temp = qian(data.substring(data.length()-(turns-1)*4+4*(i-1),data.length()-(turns-1)*4+4*i));
            }
            
            if(i == turns-1){
                result += temp;
            }else if(i== turns-2){
                result += temp + change(10000);
            }else if(i == turns-3){
                result += temp + change(100000000);
            }else{
                System.out.println("----------");
            }
        }
        return result+"元";
    }
    public static String qian(String a){
        if (a.length() == 4){
            String temp = "";
            if(!a.equals("0000")){
                if(a.indexOf("000")==0){
                    temp+=change(0)+change(Integer.parseInt(String.valueOf(a.charAt(3))));
                } else if(a.indexOf("000")==1){
                    temp += change(Integer.parseInt(String.valueOf(a.charAt(0)))) +change(1000);
                }else if(a.indexOf("00") == 0){
                    temp += a.charAt(2)=='1' ? change(0) + change(10) : change(0) +change(Integer.parseInt(String.valueOf(a.charAt(2)))) + change(10);
                    temp += a.charAt(3) !='0' ? change(Integer.parseInt(String.valueOf(a.charAt(3)))) : "";
                }else if(a.indexOf("00") == 1){
                    temp += change(Integer.parseInt(String.valueOf(a.charAt(0)))) +change(1000)+change(0)+change(Integer.parseInt(String.valueOf(a.charAt(3))));
                }else if(a.indexOf("00") == 2){
                    temp += change(Integer.parseInt(String.valueOf(a.charAt(0)))) +change(1000)+change(Integer.parseInt(String.valueOf(a.charAt(1)))) +change(100);
                }else{
                    temp += a.charAt(0)!='0' ? change(Integer.parseInt(String.valueOf(a.charAt(0)))) +change(1000) : change(0);
                    temp += a.charAt(1)!='0' ? change(Integer.parseInt(String.valueOf(a.charAt(1)))) +change(100) : change(0);
                    if(a.charAt(2)!=0){
                        temp += a.charAt(2)!='1' ? change(Integer.parseInt(String.valueOf(a.charAt(2)))) + change(10) : change(10);
                    }else{
                        temp += change(0);
                    }
                    temp += a.charAt(3)!='0' ? change(Integer.parseInt(String.valueOf(a.charAt(3)))) : "";
                }
            }
            return temp;
        }else if(a.length() == 3){
            String temp = change(Integer.parseInt(String.valueOf(a.charAt(0)))) + change(100);
            if(a.charAt(1) != '0'){
                temp += a.charAt(1)=='1' ? change(10) : change(Integer.parseInt(String.valueOf(a.charAt(1)))) + change(10);
                temp += a.charAt(2) !='0' ? change(Integer.parseInt(String.valueOf(a.charAt(2)))) : "";
            }else{
                temp += a.charAt(2)!='0' ? change(0)+change(Integer.parseInt(String.valueOf(a.charAt(2)))) : "";
            }
            return  temp;
        } else if(a.length() == 2){
            String temp = "";
            if(a.charAt(0) == '1'){
                temp += change(10);
                if(a.charAt(1) !='0'){
                    temp += change(Integer.parseInt(String.valueOf(a.charAt(1))));
                }
            }else{
                temp += change(Integer.parseInt(String.valueOf(a.charAt(0)))) + change(10);
                if(a.charAt(1) !='0'){
                    temp += change(Integer.parseInt(String.valueOf(a.charAt(1))));
                }
            }
            return  temp;
        }else if(a.length() == 1){
            return change(Integer.parseInt(a));
        }else{
            return "";
        }
    }
    public static String change(int a){
        switch(a){
            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 10:
                return "拾";
            case 100:
                return "佰";
            case 1000:
                return "仟";
            case 10000:
                return "万";
            case 100000000:
                return "亿";
            default:
                return "";
        }
    }
}
发表于 2023-04-07 19:38:17 回复(0)
模仿高赞写了一个,
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static String[] ten = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
    public static String[] power = {"元", "万", "亿"};
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String[] s = in.nextLine().split("\\.");//分割为整数部分和小数部分
            if (s[1].equals("00")) {
                System.out.println("人民币" + solveZheng(Integer.parseInt(
                                       s[0])) + "整");
            } else if (s[0].equals("0")) {
                System.out.println("人民币" + solveXiao(s[1]));
            } else {
                System.out.println("人民币" + solveZheng(Integer.parseInt(
                                       s[0])) + solveXiao(s[1]));
            }
        }

    }

    public static String solveXiao(String s2) {
        StringBuilder sb = new StringBuilder();
        int jiao = Integer.parseInt(s2.substring(0, 1));
        int fen = Integer.parseInt(s2.substring(1, 2));
        if (jiao != 0) {
            sb.append(ten[jiao]);
            sb.append("角");
        }
        if (fen != 0) {
            sb.append(ten[fen]);
            sb.append("分");
        }
        return sb.toString();
    }

    public static String solveZheng(int data) {
        StringBuilder sb = new StringBuilder();
        int count = 0;
        while (data > 0) {
            sb.insert(0, getQianName(data % 10000).append(power[count]));
            data = data / 10000;
            count++;
        }
        return sb.toString();
    }


    //每次最多转换4位数,data范围1-9999,不超过一万
    public static StringBuilder getQianName(int data) {
        StringBuilder sb = new StringBuilder();
        int gewei = data % 10;
        int shiwei = (data / 10) % 10;
        int baiwei = (data / 100) % 10;
        int qianwei = (data / 1000) % 10;
        int leftZeroNum = 0;//左边如果都是0,就不用写【零】
        if (qianwei != 0) {
            sb.append(ten[qianwei]);
            sb.append("千");
        } else {
            leftZeroNum++;
        }
        if (baiwei != 0) {
            sb.append(ten[baiwei]);
            sb.append("佰");
        } else {
            if (leftZeroNum == 0) {
                sb.append(ten[0]);
            } else {
                leftZeroNum++;
            }
        }

        if (shiwei != 0) {
            if (shiwei != 1) {
                sb.append(ten[shiwei]);
            }
            sb.append("拾");
        } else {
            if (leftZeroNum == 0) {
                sb.append(ten[0]);
            } else {
                leftZeroNum++;
            }
        }

        if (gewei != 0) {
            sb.append(ten[gewei]);
        }
        return sb;
    }
}


发表于 2023-03-09 23:48:13 回复(0)
import java.util.*;

//注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        double a = in.nextDouble();
        long fens = Math.round(a * 100);

        Main m = new Main();
        StringBuilder sb = new StringBuilder("人民币");
        sb.append(m.convert(fens));
        System.out.println(sb.toString());
    }

    public String getPos(int i) {
        switch (i) {
            case 0:
                break;
            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 "玖";
        }
        return null;
    }

    public String convert(long value) {
        StringBuilder sb = new StringBuilder();
        if (value < 100) {
            int jiao = (int) Math.floorDiv(value, 10);
            int fen = (int) (value % 10);
            if (fen == 0) {
                sb.append(getPos(jiao)).append("角");
            } else if (jiao == 0) {
                sb.append(getPos(fen)).append("分");
            } else {
                sb.append(getPos(jiao)).append("角").append(getPos(fen)).append("分");
            }
            return sb.toString();

        }

        else if (value >= 100 && value < 1000) {
            int yuan = (int) Math.floorDiv(value, 100);
            int jiaofen = (int) (value % 100);
            if (jiaofen == 0) {
                sb.append(getPos(yuan)).append("元整");
            } else {
                sb.append(getPos(yuan)).append("元").append(convert(jiaofen));
            }
            return sb.toString();
        }

	 else if (value>=1000 && value<10000){
		 int shiwei = (int) Math.floorDiv(value,1000);
		 int below = (int) (value%1000);
		 if(shiwei!=1){
			 sb.append(getPos(shiwei));
		 }
		 
		 if(below==0){
			 sb.append("拾元整");
			 
		 }
		 else if(Math.floorDiv(below,100)==0){
			 sb.append("拾元零").append(convert(below));
			 
		 }
		 else{
			 sb.append("拾").append(convert(below));
		 }
		 return sb.toString();
	 }

        else if (value >= 10000 && value < 100000) {
            int baiwei = (int) Math.floorDiv(value, 10000);
            int below = (int) (value % 10000);
            if (below == 0) {
                sb.append(getPos(baiwei)).append("佰元整");
            } else if (Math.floorDiv(below, 1000) == 0) {
                if (Math.floorDiv(below, 100) == 0) {
                    sb.append(getPos(baiwei)).append("佰元零").append(convert(below));
                } else {
                    sb.append(getPos(baiwei)).append("佰零").append(convert(below));
                }
            } else {
                sb.append(getPos(baiwei)).append("佰").append(convert(below));
            }
            return sb.toString();
        }

        else if (value >= 100000 && value < 1000000) {
            int qianwei = (int) Math.floorDiv(value, 100000);
            int below = (int) (value % 100000);
            if (below == 0) {
                sb.append(getPos(qianwei)).append("仟元整");
            } else if (Math.floorDiv(below, 10000) == 0) {
                if (Math.floorDiv(below, 1000) == 0 && Math.floorDiv(below, 100) == 0) {
                    sb.append(getPos(qianwei)).append("仟元零").append(convert(below));
                } else {
                    sb.append(getPos(qianwei)).append("仟零").append(convert(below));
                }
            } else {
                sb.append(getPos(qianwei)).append("仟").append(convert(below));
            }
            return sb.toString();
        }

        else if (value >= 1000000 && value < Math.pow(10, 10)) {
            int wanwei = (int) Math.floorDiv(value, 1000000);
            int below = (int) (value % 1000000);
            if (below == 0) {
                sb.append(convert(100 * wanwei)).delete(sb.length() - 2,
                                                        sb.length()).append("万元整");
            } else if (Math.floorDiv(below, 100000) == 0) {
                if (Math.floorDiv(below, 10000) == 0 && Math.floorDiv(below, 1000) == 0 &&
                        Math.floorDiv(below, 100) == 0) {
                    sb.append(convert(100 * wanwei)).delete(sb.length() - 2,
                                                            sb.length()).append("万元零").append(convert(below));
                } else {
                    sb.append(convert(100 * wanwei)).delete(sb.length() - 2,
                                                            sb.length()).append("万零").append(convert(below));
                }
            } else {
                sb.append(convert(100 * wanwei)).delete(sb.length() - 2,
                                                        sb.length()).append("万").append(convert(below));
            }
            return sb.toString();
        }

        else if (value >= Math.pow(10, 10)) {
            int yiwei = (int) Math.floorDiv(value, (long) Math.pow(10, 10));
            int below = (int) (value % Math.pow(10, 10));
            if (below == 0) {
                sb.append(convert(100 * yiwei)).delete(sb.length() - 2,
                                                       sb.length()).append("亿元整");
            } else if (Math.floorDiv(below, (int) Math.pow(10, 9)) == 0) {
                if (Math.floorDiv(below, (int) Math.pow(10, 8)) == 0 &&
                        Math.floorDiv(below, (int) Math.pow(10, 7)) == 0 &&
                        Math.floorDiv(below, (int) Math.pow(10, 6)) == 0
                        && Math.floorDiv(below, (int) Math.pow(10, 5)) == 0 &&
                        Math.floorDiv(below, (int) Math.pow(10, 4)) == 0 &&
                        Math.floorDiv(below, (int) Math.pow(10, 3)) == 0
                        && Math.floorDiv(below, (int) Math.pow(10, 2)) == 0) {
                    sb.append(convert(100 * yiwei)).delete(sb.length() - 2,
                                                           sb.length()).append("亿元零").append(convert(below));
                } else {
                    sb.append(convert(100 * yiwei)).delete(sb.length() - 2,
                                                           sb.length()).append("亿零").append(convert(below));
                }
            } else {
                sb.append(convert(100 * yiwei)).delete(sb.length() - 2,
                                                       sb.length()).append("亿").append(convert(below));
            }
            return sb.toString();
        }

        return sb.toString();
    }
}

import java.util.*;

//注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        double a = in.nextDouble();
        long fens = Math.round(a * 100);

        Main m = new Main();
        StringBuilder sb = new StringBuilder("人民币");
        sb.append(m.convert(fens));
        System.out.println(sb.toString());
    }

    public String getPos(int i) {
        switch (i) {
            case 0:
                break;
            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 "玖";
        }
        return null;
    }

    public String convert(long value) {
        StringBuilder sb = new StringBuilder();
        if (value < 100) {
            int jiao = (int) Math.floorDiv(value, 10);
            int fen = (int) (value % 10);
            if (fen == 0) {
                sb.append(getPos(jiao)).append("角");
            } else if (jiao == 0) {
                sb.append(getPos(fen)).append("分");
            } else {
                sb.append(getPos(jiao)).append("角").append(getPos(fen)).append("分");
            }
            return sb.toString();

        }

        else if (value >= 100 && value < 1000) {
            int yuan = (int) Math.floorDiv(value, 100);
            int jiaofen = (int) (value % 100);
            if (jiaofen == 0) {
                sb.append(getPos(yuan)).append("元整");
            } else {
                sb.append(getPos(yuan)).append("元").append(convert(jiaofen));
            }
            return sb.toString();
        }

	 else if (value>=1000 && value<10000){
		 int shiwei = (int) Math.floorDiv(value,1000);
		 int below = (int) (value%1000);
		 if(shiwei!=1){
			 sb.append(getPos(shiwei));
		 }
		 
		 if(below==0){
			 sb.append("拾元整");
			 
		 }
		 else if(Math.floorDiv(below,100)==0){
			 sb.append("拾元零").append(convert(below));
			 
		 }
		 else{
			 sb.append("拾").append(convert(below));
		 }
		 return sb.toString();
	 }

        else if (value >= 10000 && value < 100000) {
            int baiwei = (int) Math.floorDiv(value, 10000);
            int below = (int) (value % 10000);
            if (below == 0) {
                sb.append(getPos(baiwei)).append("佰元整");
            } else if (Math.floorDiv(below, 1000) == 0) {
                if (Math.floorDiv(below, 100) == 0) {
                    sb.append(getPos(baiwei)).append("佰元零").append(convert(below));
                } else {
                    sb.append(getPos(baiwei)).append("佰零").append(convert(below));
                }
            } else {
                sb.append(getPos(baiwei)).append("佰").append(convert(below));
            }
            return sb.toString();
        }

        else if (value >= 100000 && value < 1000000) {
            int qianwei = (int) Math.floorDiv(value, 100000);
            int below = (int) (value % 100000);
            if (below == 0) {
                sb.append(getPos(qianwei)).append("仟元整");
            } else if (Math.floorDiv(below, 10000) == 0) {
                if (Math.floorDiv(below, 1000) == 0 && Math.floorDiv(below, 100) == 0) {
                    sb.append(getPos(qianwei)).append("仟元零").append(convert(below));
                } else {
                    sb.append(getPos(qianwei)).append("仟零").append(convert(below));
                }
            } else {
                sb.append(getPos(qianwei)).append("仟").append(convert(below));
            }
            return sb.toString();
        }

        else if (value >= 1000000 && value < Math.pow(10, 10)) {
            int wanwei = (int) Math.floorDiv(value, 1000000);
            int below = (int) (value % 1000000);
            if (below == 0) {
                sb.append(convert(100 * wanwei)).delete(sb.length() - 2,
                                                        sb.length()).append("万元整");
            } else if (Math.floorDiv(below, 100000) == 0) {
                if (Math.floorDiv(below, 10000) == 0 && Math.floorDiv(below, 1000) == 0 &&
                        Math.floorDiv(below, 100) == 0) {
                    sb.append(convert(100 * wanwei)).delete(sb.length() - 2,
                                                            sb.length()).append("万元零").append(convert(below));
                } else {
                    sb.append(convert(100 * wanwei)).delete(sb.length() - 2,
                                                            sb.length()).append("万零").append(convert(below));
                }
            } else {
                sb.append(convert(100 * wanwei)).delete(sb.length() - 2,
                                                        sb.length()).append("万").append(convert(below));
            }
            return sb.toString();
        }

        else if (value >= Math.pow(10, 10)) {
            int yiwei = (int) Math.floorDiv(value, (long) Math.pow(10, 10));
            int below = (int) (value % Math.pow(10, 10));
            if (below == 0) {
                sb.append(convert(100 * yiwei)).delete(sb.length() - 2,
                                                       sb.length()).append("亿元整");
            } else if (Math.floorDiv(below, (int) Math.pow(10, 9)) == 0) {
                if (Math.floorDiv(below, (int) Math.pow(10, 8)) == 0 &&
                        Math.floorDiv(below, (int) Math.pow(10, 7)) == 0 &&
                        Math.floorDiv(below, (int) Math.pow(10, 6)) == 0
                        && Math.floorDiv(below, (int) Math.pow(10, 5)) == 0 &&
                        Math.floorDiv(below, (int) Math.pow(10, 4)) == 0 &&
                        Math.floorDiv(below, (int) Math.pow(10, 3)) == 0
                        && Math.floorDiv(below, (int) Math.pow(10, 2)) == 0) {
                    sb.append(convert(100 * yiwei)).delete(sb.length() - 2,
                                                           sb.length()).append("亿元零").append(convert(below));
                } else {
                    sb.append(convert(100 * yiwei)).delete(sb.length() - 2,
                                                           sb.length()).append("亿零").append(convert(below));
                }
            } else {
                sb.append(convert(100 * yiwei)).delete(sb.length() - 2,
                                                       sb.length()).append("亿").append(convert(below));
            }
            return sb.toString();
        }

        return sb.toString();
    }
}

一亿亿以内应该都没问题了……话说大写数字不允许“壹拾”吗,以及元和分之间不允许加“零”?
发表于 2023-01-06 16:15:19 回复(0)
import java.util.*;

public class Main{
    
    static Map<Integer, String> map1 = new HashMap<>();
    static Map<Integer, String> map2 = new HashMap<>();
        

    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        String str = scan.nextLine();
        
        //先准备一下数据
        map1.put(0, "零");
        map1.put(1, "壹");
        map1.put(2, "贰");
        map1.put(3, "叁");
        map1.put(4, "肆");
        map1.put(5, "伍");
        map1.put(6, "陆");
        map1.put(7, "柒");
        map1.put(8, "捌");
        map1.put(9, "玖");
        map2.put(1, "");
        map2.put(2, "拾");
        map2.put(3, "佰");
        map2.put(4, "仟");
        map2.put(5, "万");
        map2.put(9, "亿");
        
        List<String> list = new ArrayList<>();
        StringBuilder sb = new StringBuilder();
        sb.append("人民币");
        
        //分为整数部分和小数部分
        String[] strs = str.split("\\.");
        
        //解决整数部分;将整数部分从后往前4个分为一组,分别对每一组进行转换,根据组号来判断结束是亿、万、元
        int len1 = strs[0].length();
        for(int i = len1; i > 0; i -= 4){
            int start = i - 4 >= 0 ? i - 4 : 0;
            String s1 = strs[0].substring(start, i);
            if (Integer.parseInt(s1) != 0){
                list.add(s1);
            }    
        }
        //从高位开始转换拼接
        for(int i = list.size() - 1; i >= 0; --i){
            String re = transfer(list.get(i), i);
            sb.append(re);
        }
        
        //处理小数部分
        if (Integer.parseInt(strs[1]) == 0){
            sb.append("整");
            System.out.print(sb);
        }else{
            for(int i = 0; i < strs[1].length(); ++i){
                char c = strs[1].charAt(i);
                if(c == '0'){
                    continue;
                }else if(c != '0' && i == 0){
                    String sss = map1.get(c - '0');
                    sb.append(sss);
                    sb.append("角");
                }else{
                    String sss = map1.get(c - '0');
                    sb.append(sss);
                    sb.append("分");
                }
            }
            System.out.print(sb);
        }   
    }
    
    //对四位的数字进行转换
    private static String transfer(String num, int ans){
        StringBuilder sb = new StringBuilder();
        int len = num.length();
        int end = 0;
        
        //找后面第一个不为0的下标,如果为0则不需要转换了,例如5300,只需要转换53,五千三百
        for(int i = num.length() - 1; i >= 0; --i){
            if(num.charAt(i) != '0'){
                end = i;
                break;
            }
        }
        //如果像5001,中间有多个0的,只需要写一个零,所以用这个控制个数
        int total = 1;
        for(int i = 0; i <= end; ++i){
            String s1 = map1.get(num.charAt(i) - '0');
            //只能写一个零
            if (s1.equals("零") && total > 0){
                sb.append(s1);
                --total;
            }else if(s1.equals("壹") && len == 2){
                //这里是为了只有两位的时候,例如15,输出拾伍,而不是壹拾伍,其实我觉得都可以
            }else{
                sb.append(s1);
            }
            //如果是零就不需要写后面的仟、佰、拾了
            if(!s1.equals("零")){
                String s2 = map2.get(len);
                sb.append(s2);
            }  
            len--;
        }
        //根据传来的参数,判断是属于第几段的四位数,拼接不同的
        if (ans == 2){
            sb.append("亿");
        }else if(ans == 1){
            sb.append("万");
        }else if(ans == 0){
            sb.append("元");
        }
        return new String(sb);
    }
}

发表于 2022-07-06 11:47:38 回复(0)
import java.util.*;

public class Main {
    
    private static Map<Integer, String> groupMap;
    private static Map<Integer, String> map;
    
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        groupMap = new HashMap<Integer, String>() {
            {
                put(1, "万");
                put(2, "亿");
            }
        };
        map = new HashMap<Integer, String>() {
            {
                put(0, "零");
                put(1, "壹");
                put(2, "贰");
                put(3, "叁");
                put(4, "肆");
                put(5, "伍");
                put(6, "陆");
                put(7, "柒");
                put(8, "捌");
                put(9, "玖");
                put(10, "拾");
            }
        };
        while (in.hasNext()) {
            String s = in.nextLine();
            System.out.println(solve(s));
        }
    }
    
    private static String solve(String s) {
        String[] arr = s.split("\\.");
        
        // 前缀
        String wordPrefix = "人民币";
        
        // 整数部分
        String wordFirst = parseFirst(arr[0]);
        
        // 小数部分
        String wordSecond = "";
        if (arr.length == 2) {
            wordSecond = parseSecond(arr[1]);
        }
        
        // 后缀
        String wordSuffix = "";
        if (wordFirst != "") {
            wordSuffix += "元";
        }
        if (wordFirst != "" && wordSecond.isEmpty()) {
            wordSuffix += "整";
        }
        return wordPrefix + wordFirst + wordSuffix + wordSecond;
    }
    
    private static String parseFirst(String s) {
        // 从右往左, 每四个为一组
        List<String> group = new ArrayList<>();
        int j = 0;
        StringBuilder sb = new StringBuilder();
        for (int i = s.length() - 1; i >= 0; i--) {
            sb.append(s.charAt(i));
            j++;
            if (j % 4 == 0) {
                group.add(sb.reverse().toString());
                sb.setLength(0);
            }
        }
        if (sb.length() != 0) {
            group.add(sb.reverse().toString());
        }
        // 翻转
        Collections.reverse(group);
        int groupSize = group.size();
        if (groupSize == 1) {
            return parseUnit(group.get(0));
        }
        int groupWordId = groupSize - 1;
        StringBuilder res = new StringBuilder();
        for (int i = 0; i < group.size(); i++) {
            String unitWord = parseUnit(group.get(i));
            res.append(unitWord);
            if (groupWordId >= 1) {
                res.append(groupMap.get(groupWordId));
            }
            groupWordId--;
        }
        return res.toString();
    }
    
    private static String parseUnit(String s) {
        // 全零check
        if (allZero(s)) {
            return "";
        }
        // 仅个位
        if (s.length() == 1) {
            int one = Integer.valueOf(s);
            return map.get(one);
        }
        // 有十位
        if (s.length() == 2) {
            if (s.charAt(0) == '0') {
                return parseUnit(s.substring(1));
            }
            if (s.charAt(0) == '1') {
                return "拾" + parseUnit(s.substring(1));
            }
            return parseUnit(s.substring(0, 1)) + "拾" + parseUnit(s.substring(1));
        }
        // 有百位
        if (s.length() == 3) {
            if (s.charAt(0) == '0') {
                return parseUnit(s.substring(1));
            }
            if (s.charAt(1) == '0') {
                return parseUnit(s.substring(0, 1)) + "佰" + "零" + parseUnit(s.substring(2));
            }
            return parseUnit(s.substring(0, 1)) + "佰" + parseUnit(s.substring(1));
        }
        // 有千位
        if (s.charAt(0) == '0') {
            return parseUnit(s.substring(1));
        }
        if (s.charAt(1) == '0') {
            return parseUnit(s.substring(0, 1)) + "仟" + "零" + parseUnit(s.substring(2));
        }
        return parseUnit(s.substring(0, 1)) + "仟" + parseUnit(s.substring(1));
    }
    
    private static boolean allZero(String s) {
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) != '0') {
                return false;
            }
        }
        return true;
    }
    
    private static String parseSecond(String s) {
        if (allZero(s)) {
            return "";
        }
        if (s.length() == 1) {
            int x = Integer.valueOf(s);
            return map.get(x) + "角";
        }
        if (s.length() == 2) {
            if (s.charAt(1) == '0') {
                return parseSecond(s.substring(0, 1));
            }
            int x = Integer.valueOf(s.substring(1));
            return parseSecond(s.substring(0, 1)) + map.get(x) + "分";
        }
        return "";
    }
}

发表于 2022-05-30 13:10:39 回复(0)
import java.util.Scanner;
import java.util.*;
import java.lang.*;

public class Main{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        String str = input.nextLine();
        StringBuilder sb = new StringBuilder();
        sb.append("人民币");
        
        String[] arr = str.split("\\.");
        String str1 = arr[0];
        String str2 = arr[1];
        
         int n = str1.length()/4;
        int nn = str1.length()%4;
        if(nn > 0) n++;
        ArrayList list = getList(str1,n,nn);
        sb.append(getTag(list,n));
        sb.append(getString2(str2));
        System.out.println(sb.toString());
        
    }
    // 分割
    private static ArrayList getList(String str,int n,int nn){
        ArrayList list  = new ArrayList();
        if(nn > 0){
            list.add(str.substring(0,nn));
        }
        for(int i=nn;i<str.length();i+=4){
            list.add(str.substring(i,i+4));
        }
        return list;
    }
    // 跨级添加
    private static String getTag(ArrayList list,int n){
        StringBuilder sb = new StringBuilder();
        if(n == 1 && "0".equals(list.get(0))) return sb.toString();
        for(int i=0;i<list.size();i++){
            sb.append(getString((String)list.get(i)));
            if(n%2 == 0) {
                sb.append("万");
            }
            if(n%2 == 1 && n != 1) {
                sb.append("亿");
            }
            n--;
        }
        sb.append("元");
        return sb.toString();
    }
    // 四位遍历
    private static String getString(String str){
        String[] arr = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
        int n = str.length();
        StringBuilder sb = new StringBuilder();
        for(int i=n-1;i>=0;i--){
            if(i == n-2){
                sb.append("拾");
            }else if(i == n-3){
                sb.append("佰");
            }else if(i == n-4){
                sb.append("仟");
            }
            int index = Integer.parseInt(str.charAt(i)+"");
            sb.append(arr[index]);
        }
        sb = sb.reverse();
        String s = sb.toString();
         
        s = s.replaceAll("零零","零");
        s = s.replaceAll("零零零","");
        s = s.replaceAll("壹拾","拾");
        return s;
    }
     private static String getString2(String str){
         char c1 = str.charAt(0);
         char c2 = str.charAt(1);
         if(c1 == '0' && c2 == '0') return "整";
         String[] arr = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
         int index1 = Integer.parseInt(c1+"");
         int index2 = Integer.parseInt(c2+"");
         String s = "";
         if(c1 != '0'){
             s += arr[index1] + "角";
         }else{
             s += arr[index1];
         }
         if(c2 != '0'){
             s += arr[index2] + "分";
         }
         return s.replaceAll("零","");
     }
}


发表于 2022-05-19 19:52:16 回复(0)
枚举所有可能情况即可。
import java.util.*;
import java.io.*;

 
/**
没有啥技巧,枚举所有可能情况
*/
public class Main {
    
    public static HashMap<Integer,String> numMap = new HashMap(){{
        put(0,"零");
        put(1,"壹");
        put(2,"贰");
        put(3,"叁");
        put(4,"肆");
        put(5,"伍");
        put(6,"陆");
        put(7,"柒");
        put(8,"捌");
        put(9,"玖");
    }};
    
    public static void main(String[] args) throws Exception {
        // 处理输入
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] split = br.readLine().split("\\.");
        // 整数位
        String v1 = split[0];
        // 小数位
        String v2 = split[1];
        
        // 求解整数部分
        StringBuilder res = new StringBuilder();
        res.append("人民币");
        // xx亿 如:1 2345 6789
        if (v1.length() >= 9) {
            res.append(numToChinese(v1.substring(0,v1.length() - 8)));
            res.append("亿");
            res.append(numToChinese(v1.substring(v1.length() - 8,v1.length() - 4)));
            res.append("万");
            res.append(numToChinese(v1.substring(v1.length() - 4)));
        // xx万 如:1 2345    
        } else if (v1.length() < 9 && v1.length() >= 5) {
            res.append(numToChinese(v1.substring(0,v1.length() - 4)));
            res.append("万");
            res.append(numToChinese(v1.substring(v1.length() - 4)));
        // xx 如:1234    
        } else if (v1.length() > 0 && v1.length() <= 4) {
            res.append(numToChinese(v1));
        }
        // 排除 00.15这种整数位全为0的情况
        if (res.length() != 3)
            res.append("元");
        
        // 求解小数部分
        res.append(deceToCh(v2));
        
        // 输出结果
        System.out.println(res.toString());
        br.close();
        
        
    }
    
    /**
    每4位数字为一组,求解整数位
    */
    public static String numToChinese(String num) {
        StringBuilder res = new StringBuilder();
        // 处理如0001、0039、0132 把首部的0全去掉
        while (num.startsWith("0"))
            num = num.substring(1);
        // 处理如 1000 1200 1230 这种情况,把尾部的0全去掉
        while (num.endsWith("0"))
            num = num.substring(0,num.length() - 1);
        
        // 枚举所有可能情况:1002 1023 1203 1234
        // 第一种情况 1023 1203 1234
        // 第二种情况 1002 第三位的零不写入
        if (num.length() == 4) {
            // 仟
            int v1 = num.charAt(0) - 48;
            res.append(numMap.get(v1));
            res.append("仟");
            
            // 佰
            int v2 = num.charAt(1) - 48;
            res.append(numMap.get(v2));
            if (v2 != 0)
                res.append("佰");
            
            // 拾
            int v3 = num.charAt(2) - 48;
            if (v3 == 0) {
                if (v2 != 0)
                    res.append("零");
                else
                    res.append("");
            } else if (v3 == 1) {
                res.append("拾");
            } else {
                res.append(numMap.get(v3));
                res.append("拾");
            }
            
            // 个位
            int v4 = num.charAt(3) - 48;
            if(v4 != 0)
                res.append(numMap.get(v4));
            
        //枚举所有可能情况: 102 123
        } else if (num.length() == 3) {
             // 佰
            int v1 = num.charAt(0) - 48;
            res.append(numMap.get(v1));
            res.append("佰");
            
            // 拾
            int v2 = num.charAt(1) - 48;
            if (v2 == 0) {
                res.append("零");
            } else if (v2 == 1) {
               res.append("拾");
            } else {
                res.append(numMap.get(v2));
                res.append("拾");
            }
            
            // 个位
            int v3 = num.charAt(2) - 48;
            if(v3 != 0)
                res.append(numMap.get(v3));
            
        // 枚举所有可能情况:10 12
        } else if (num.length() == 2) {
            // 拾
            int v1 = num.charAt(0) - 48;
            if (v1 == 1) {
               res.append("拾");
            } else {
                res.append(numMap.get(v1));
                res.append("拾");
            }
            
            // 个位
            int v2 = num.charAt(1) - 48;
            if(v2 != 0)
                res.append(numMap.get(v2));
            
        // 枚举所有可能情况: 1、2
        } else if (num.length() == 1) {
            // 个位
            int v1 = num.charAt(0) - 48;
            if(v1 != 0)
                res.append(numMap.get(v1));
        }
        
        return res.toString();
    }
    
     /**
      求解小数位
    */
    public static String deceToCh(String dec) {
        StringBuilder res = new StringBuilder();
        int v1 = dec.charAt(0) - 48;
        int v2 = dec.charAt(1) - 48;
        
        // 枚举所有可能情况: 00 01 10 12 
        if (v1 == 0 && v2 == 0){
            res.append("整");
        } else if (v1 == 0 && v2 != 0) {
            res.append(numMap.get(v2));
            res.append("分");
        } else if (v1 != 0 && v2 == 0) {
            res.append(numMap.get(v1));
            res.append("角");
        } else if (v1 != 0 && v2 != 0) {
            res.append(numMap.get(v1));
            res.append("角");
            res.append(numMap.get(v2));
            res.append("分");
        }
        return res.toString();
    }
}

发表于 2022-05-09 18:04:29 回复(0)
import java.util.*;

public class Main{
    public static long yi = 100000000;
    public static long wj = 10000;
    public static long qmwj = 10000000;
    public static long qm = 1000;
    public static String[] map = {"零", "壹","贰", "叁", "肆" ,"伍","陆","柒","捌","玖"};
    public static StringBuffer sb = new StringBuffer();
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        String s = in.next();
        String[] sc = s.split("\\.");
        long bi = Long.parseLong(sc[0]);
        int si = Integer.parseInt(sc[1]);
        vg(bi);
        if(bi > 0) sb.append("元");
        System.out.println("人民币"+sb.toString()+sm(si));
    }
    public static void vg(long bi){
        if(bi >= yi){
            long yiU = bi / yi;
            long yiRest = bi % yi;
            vg(yiU);
            sb.append("亿");
            if(yiRest >= qmwj){
                vg(yiRest);
            }else{
                sb.append("零");
                vg(yiRest);
            }
        }else if(bi >= wj){
            long w = bi / wj;
            long rest = bi % wj;
            vg(w);
            sb.append("万");
            if(rest >= qm){
                vg(rest);
            }else{
                sb.append("零");
                vg(rest);
            }
        }else{
            long q = bi / qm;
            long baiTmp = bi % qm;
            long bd = baiTmp / 100;
            long uiTmp = baiTmp % 100;
            long ui = uiTmp /10;
            long ge = uiTmp % 10;
            if(q >0) sb.append(map[(int)q]+"仟");
            if(bd >0) sb.append(map[(int)bd]+"佰");
            if(ui >0){
                if(q >0 && bd ==0) sb.append("零"+map[(int)ui]+"拾");
                else{
                    if(ui == 1){
                        sb.append("拾");
                    }else  sb.append(map[(int)ui]+"拾");
                } 
            }
            if(ge >0){
                if((q >0 && bd ==0 && ui==0) || (bd >0 && ui ==0) ) sb.append("零"+map[(int)ge]);
                else sb.append(map[(int)ge]);
            }
        }
    }
    public static String sm(int si){
        if(si == 0) return "整";
        else{
            StringBuffer sb = new StringBuffer();
            int jn = si /10;
            int ff = si % 10;
            if(jn != 0) sb.append(map[(int)jn]+"角");
            if(ff != 0) sb.append(map[(int)ff]+"分");
            return sb.toString();
        }
    }
}

发表于 2022-05-06 00:19:08 回复(0)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Stack;

public class Main {
    static HashMap<Character, Character> map = new HashMap<>();
    static String[] power = {"亿", "万", ""};

    static {
        map.put('0', '零');
        map.put('1', '壹');
        map.put('2', '贰');
        map.put('3', '叁');
        map.put('4', '肆');
        map.put('5', '伍');
        map.put('6', '陆');
        map.put('7', '柒');
        map.put('8', '捌');
        map.put('9', '玖');
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s;
        while ((s = br.readLine()) != null) {
            String[] split = s.split("\\.");
            int m = Integer.parseInt(split[0]);
            String s1;
            // 0.85
            if (m == 0) {
                s1 = "人民币" + printM(m) + printN(split[1]);
            } else
                s1 = "人民币" + printM(m) + "元" + printN(split[1]);
            String s2 = s1.replaceAll("壹拾", "拾");
            String s3 = s2.replaceAll("零{2,}", "零");
            String s4 = s3.replaceAll("零角","")
                    .replaceAll("零元","元")
                    .replaceAll("零万","万");
            System.out.println(s4);
        }
    }

    // 小数部分
    private static String printN(String s) {
        if (s.equals("00"))
            return "整";
        else {
            if (s.charAt(1) == '0') {
                return map.get(s.charAt(0)) + "角";  // 1.40
            }
            return map.get(s.charAt(0)) + "角" + map.get(s.charAt(1)) + "分";
        }
    }

    // 整数部分
    private static String printM(int m) {
        Stack<String> stack = new Stack<>();
        while (m != 0) {
            int r = m % 10000;
            stack.push(String.valueOf(r));
            m = m / 10000;
        }
        int x = stack.size();
        StringBuilder sb = new StringBuilder();
        for (int i = 3 - x; i < power.length; i++) {
            String temp = printFour(stack.pop()) + power[i];
            sb.append(temp);
        }
        return sb.toString();
    }

    private static String printFour(String s) {
        int length = s.length();
        String[] p = new String[]{"仟", "佰", "拾", ""};
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < s.toCharArray().length; i++) {
            if (s.toCharArray()[i] == '0')
                sb.append(map.get(s.toCharArray()[i]));
            else
                sb.append(map.get(s.toCharArray()[i])).append(p[i + 4 - length]);
        }
        return sb.toString();
    }
}

发表于 2022-04-25 02:00:15 回复(0)
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        String[] dic = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
        while(in.hasNextLine()){
            String str = in.nextLine();
            String[] strs = str.split("\\.");
            String zhengshu = strs[0];
            String xiaoshu = strs[1];
            StringBuilder builder = new StringBuilder();
            builder.append("人民币");
            // 先处理整数部分
            int n = zhengshu.length();
            String zeroStr = "";
            if(n % 4 != 0){
                for(int i = 0; i < (4 - (n % 4)); i++){
                    zeroStr += "0";
                }
            }
            zhengshu = zeroStr + zhengshu;
            //System.out.println(zhengshu);
            // 把数字按四个一组分组
            // 亿 万 元
            int i = zhengshu.length();;
            String danwei = "元";
            List<String> list = new ArrayList<>();
            while(i >= 4){
                StringBuilder sb = new StringBuilder();
                String temp = zhengshu.substring(i - 4, i);
                //System.out.println(temp);
                int a = temp.charAt(0) - '0';
                int b = temp.charAt(1) - '0';
                int c = temp.charAt(2) - '0';
                int d = temp.charAt(3) - '0';
                boolean aIsZero = false;
                boolean bIsZero = false;
                boolean cIsZero = false;
                boolean dIsZero = false;
                if(a != 0){
                    sb.append(dic[a] + "仟");
                }else{
                    aIsZero = true;
                }
                
                if(b != 0){
                    if(aIsZero){
                        sb.append("零" + dic[b] + "佰");
                    }else{
                        sb.append(dic[b] + "佰");
                    }
                }else{
                    bIsZero = true;
                }
                
                if(c != 0){
                   if(bIsZero){
                        sb.append("零" + (c == 1 ? "" : dic[c]) + "拾");
                    }else{
                        sb.append(dic[c] + "拾");
                    }
                }else{
                    cIsZero = true;
                }
                
                if(d != 0){
                    if(cIsZero){
                        sb.append("零" + dic[d]);
                    }else{
                        sb.append(dic[d]);
                    }
                }else{
                    dIsZero = true;
                }
                if(aIsZero && bIsZero && cIsZero && dIsZero){
                    sb.append("");
                }else{
                    sb.append(danwei);
                    list.add(sb.toString());
                }
                if("元".equals(danwei)){
                    danwei = "万";
                }else if("万".equals(danwei)){
                    danwei = "亿";
                }
                i -= 4;
            }
            for(int j = list.size() - 1; j >= 0; j--){
                String s = list.get(j);
                if(j == list.size() - 1 && s.charAt(0) == '零'){
                    builder.append(s.substring(1));
                }else{
                    builder.append(s);
                }
            }
            // 再处理小数部分
            boolean flag = true;
            int a = xiaoshu.charAt(0) - '0';
            int b = xiaoshu.charAt(1) - '0';
            if(a != 0){
                builder.append(dic[a] + "角");
                flag = false;
            }
            if(b != 0){
                builder.append(dic[b] + "分");
                flag = false;
            }
            if(flag){
                builder.append("整");
            }
            System.out.println(builder);
        }
    }
}

发表于 2022-04-09 11:40:51 回复(0)