101 → 一百零一
#编程题
阿拉伯计数转成中文:
思路:直接数组对应先匹配出来,再处理特殊情况
const numberMap = {
0: "零",
1: "一",
2: "二",
3: "三",
4: "四",
5: "五",
6: "六",
7: "七",
8: "八",
9: "九",
};
const unitMap = {
0: "", // 个位
1: "十", // 十位
2: "百", // 百位
3: "千", // 千位
4: "万", // 万位
5: "十", // 十万位
6: "百", // 百万位
7: "千", // 千万位
8: "亿", // 亿位
};
function numberToChinese(num) {
// 转换为字符串
const numStr = num.toString();
// 结果数组
const result = [];
// 数字长度
const length = numStr.length;
// 处理零的特殊情况
if (num === 0) return numberMap[0];
for (let i = 0; i < length; i++) {
const digit = parseInt(numStr[i]);
const position = length - 1 - i; // 位置(从右往左)
// 跳过零的处理
if (digit === 0) {
// 当前数字是0,且不是最后一位,且后面的数字不是0
if (i < length - 1 && numStr[i + 1] !== "0") {
result.push(numberMap[digit]);
}
continue;
}
// 处理十位数的特殊情况(如:一十 => 十)
if (position === 1 && digit === 1 && i === 0) {
result.push(unitMap[position]);
} else {
result.push(numberMap[digit]);
result.push(unitMap[position]);
}
}
return result.join("");
}
// 测试
console.log(numberToChinese(0)); // 零
console.log(numberToChinese(10)); // 十
console.log(numberToChinese(11)); // 十一
console.log(numberToChinese(111)); // 一百一十一
console.log(numberToChinese(1001)); // 一千零一
console.log(numberToChinese(10001)); // 一万零一
console.log(numberToChinese(10101)); // 一万零一百零一
console.log(numberToChinese(100000)); // 十万
console.log(numberToChinese(1000001)); // 一百万零一