题目来源于《算法的乐趣》
let chinese = [
'零',
'一',
'二',
'三',
'四',
'五',
'六',
'七',
'八',
'九'
]
let units = [
'十',
'百',
'千',
'万'
]
// 解法:
// 1. 判断当前位数匹配到 Chinese 中,然后获取到对应的中文
// 2. 然后判断当前是多少位数,然后看是十百千万这种
// 尝试使用 reduce 写一下
// 注意的点:
// 1 最后一位是 0 的情况下,需要忽略,
// 2 中间某一位是 0 的情况下,不要加上 十百千万 这种
// 3 中间如果有多个 0 ,只需要保留一位 0
function toChinese(num) {
let str = '' + num;
let res = '';
// 需要使用倒序而不是正序
for (let len = str.length, i = len - 1; i >= 0; i--) {
// 末尾如果是 0,则忽略
if (i == len - 1 && str[i] == 0) {
continue;
}
// 如果某位数是 0 ,则不要加上 十百千万 这种
if (i == len - 1 || str[i] == 0) {
// 如果下一位还是 0,那么当前这位就可以忽略
// 为什么这里不是 i - 1 而是 i + 1呢
if (str[i + 1] == 0) {
continue;
}
res += chinese[str[i]];
}
else {
// 单位的索引 和 数字的索引 不一样
res += units[len - 1 - i - 1] + chinese[str[i]];
}
}
return res.split('').reverse().join('');
}