首页 > 试题广场 >

阿拉伯数字转中文

[编程题]阿拉伯数字转中文
  • 热度指数:2147 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个整数,请你输出这个整数的中文读法。
例如:
153,读作一百五十三
103,读作一百零三
1003,读作一千零三

数据范围:
示例1

输入

114514

输出

"十一万四千五百一十四"
示例2

输入

1000

输出

"一千"
示例3

输入

-1035

输出

"负一千零三十五"
import java.util.*;


public class Solution {

    public String num2cn (int num) {
        String[] arr1 = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
        String[] arr2 = {"", "十", "百", "千", "万", "十", "百", "千", "亿", "十", "百", "千", "万", "十", "百", "千", "亿"}; //可继续追加更高位转换值
        if (num == 0) {
            return "零";
        }
        boolean negative = false;
        if (num < 0) {
            num = Math.abs(num);
            negative = true;
        }
        String english = String.valueOf(num);
        String result = "";
        for (int i = 0; i < english.length(); i++) {
            int des_i = english.length() - 1 - i;//倒序排列设值
            result = arr2[i] + result;
            int arr1_index = Integer.parseInt(String.valueOf(english.charAt(des_i)));
            result = arr1[arr1_index] + result;
        }
        //将【零千、零百】换成【零】 【十零】换成【十】
        result = result.replaceAll("零(千|百|十)", "零").replaceAll("十零",
                 "十");
        //合并中间多个零为一个零
        result = result.replaceAll("零+", "零");
        //将【零亿】换成【亿】【零万】换成【万】
        result = result.replaceAll("零亿", "亿").replaceAll("零万", "万");
        //将【亿万】换成【亿】
        result = result.replaceAll("亿万", "亿");
        //移除末尾的零
        result = result.replaceAll("零+$", "");
        //将【零一十】换成【零十】
        //result = result.replaceAll("零一十", "零十");//貌似正规读法是零一十
        //将【一十】换成【十】
        result = result.replaceAll("^一十", "十");
        if(negative) {
            result = "负" + result;
        }
        return result;
    }
}

发表于 2023-03-28 09:46:26 回复(0)
小于等于十亿然后给了我一个十亿零七的测试数据?😶
发表于 2022-03-17 18:28:36 回复(2)