Skip to content

Latest commit

 

History

History
60 lines (56 loc) · 1.49 KB

阿拉伯数字转中文.md

File metadata and controls

60 lines (56 loc) · 1.49 KB

阿拉伯数字转中文

题目来源于《算法的乐趣》

解法

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('');
}