BiliBili服务端笔试0322编程题

发布于 2025-03-22  137 次阅读


给定一个整数 请你输出这个整数的中文读法

数据范围 |val| ≤10^9

  • 输入: 114514
  • 输出: "十一万四千五百一十四"
  • 输入:1000
  • 输出:“一千”
  • 输入:-1035
  • 输出: "负一千零三十五"
private static final String[] digits = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};

    public String num2cn(int n) {
        if (n == 0) return digits[0];
        String sign = "";
        long num = n;
        if (num < 0) {
            sign = "负";
            num = -num;
        }
        return sign + convert(num, true);
    }


    private String convert(long num, boolean isHighest) {

        if (num < 10000) {
            return convertBelow10000((int)num, isHighest);
        }

        if (num < 100000000) {
            long wan = num / 10000;
            long rest = num % 10000;
            String result = convert(wan, true) + "万";
            if (rest != 0) {

                if (rest < 1000) {
                    result += "零" + convert(rest, false);
                } else {
                    result += convert(rest, false);
                }
            }
            return result;
        } else {
            long yi = num / 100000000;
            long rest = num % 100000000;
            String result = convert(yi, true) + "亿";
            if (rest != 0) {
                if (rest < 10000000) {
                    result += "零" + convert(rest, false);
                } else {
                    result += convert(rest, false);
                }
            }
            return result;
        }
    }

    private String convertBelow10000(int num, boolean isHighest) {

        if (num < 10) {
            return digits[num];
        }

        if (num < 100) {
            int ten = num / 10;
            int unit = num % 10;

            if (isHighest && ten == 1) {
                return "十" + (unit == 0 ? "" : digits[unit]);
            } else {
                return digits[ten] + "十" + (unit == 0 ? "" : digits[unit]);
            }
        }

        if (num < 1000) {
            int hundred = num / 100;
            int rem = num % 100;
            String result = digits[hundred] + "百";
            if (rem != 0) {

                if (rem < 10) {
                    result += "零" + convertBelow10000(rem, false);
                } else {

                    if (rem < 10) {
                        result += "零" + convertBelow10000(rem, false);
                    } else {
                        result += convertBelow10000(rem, false);
                    }
                }
            }
            return result;
        }

        int thousand = num / 1000;
        int rem = num % 1000;
        String result = digits[thousand] + "千";
        if (rem != 0) {

            if (rem < 100) {
                result += "零" + convertBelow10000(rem, false);
            } else {
                result += convertBelow10000(rem, false);
            }
        }
        return result;
    }
人生の意味は平凡ですか、それとも素晴らしいですか?
最后更新于 2025-03-22