算法题解-整数转换英文

109 阅读2分钟

题目

将非负整数 num 转换为其对应的英文表示

输入: num = 123
输出: "One Hundred Twenty Three"

题解

第一种

在函数中我们先判断如果输入的数字为0,如果为0我们则直接返回字符串'Zero',接下来我们声明了四个变量,分别是ans变量和numToStr数组和numTostr1数组以及level数组,变量ans用于保存最终的结果,他的值是一个空字符串,numToStr是一个包含0到19的数字对应的英文单词的数组,numToStr1是一个包含20到90以10为单位的数字对应的英文单词的数组,level是一个包含进制单位的数组,然后我们在使用循环来对输入的数字进行处理,循环的条件我们设置为num除以1000的结果大于0,也就是我们输入的数字大于等于1000就会进行循环,在循环中我们首先声明一个变量str用于保存当前处理的三位数对应的英文单词,它的值为一个空字符串,然后我们在将num除以1000的余数赋值给变量num1,并将num除以1000取整的结果赋值给num,相当于将num向右移动三位,然后去计算百位数的值,即将num1除以100取整的结果,赋值给变量percentile,如果percentile不等于0,则将对应的英文单词添加到str中,并在后面加上单词'Hundred',接下来我们计算num1除以100的余数,即剩下的两位数,如果这个数小于20,则直接将对应的英文单词添加到str中,否则,将这个数除以10取整的结果赋值给变量tenths,将num1除以10的余数赋值给num1,然后将对应的英文单词添加到str中,在从level数组中取出一个进制单位,并将取出的单位从数组中删除,如果str长度大于0,则将str和单位添加到ans的前面,循环结束后,我们去掉开头的空格后并返回ans字符串即可

var numberToWords = function (num) {
    if (num === 0) {
        return 'Zero'
    }
    let ans = '';
    const numToStr = ['', ' One', ' Two', ' Three', ' Four', ' Five', ' Six', ' Seven', ' Eight', ' Nine', ' Ten', ' Eleven', ' Twelve', ' Thirteen', ' Fourteen', ' Fifteen', ' Sixteen', ' Seventeen', ' Eighteen', ' Nineteen']
    const numToStr1 = ['', '', ' Twenty', ' Thirty', ' Forty', ' Fifty', ' Sixty', ' Seventy', ' Eighty', ' Ninety']
    const level = ['', ' Thousand', ' Million', ' Billion']
    while (num / 1000 > 0) {
        let str = ''
        let num1 = num % 1000;
        num = Math.floor(num / 1000)
        const percentile = Math.floor(num1 / 100);
        str += numToStr[percentile]
        if (str !== '') {
            str += ' Hundred'
        }
        num1 = num1 % 100;
        if (num1 < 20) {
            str += numToStr[num1]
        } else {
            const tenths = Math.floor(num1 / 10);
            num1 = num1 % 10
            str += numToStr1[tenths];
            str += numToStr[num1]
        }
        const unit = level.splice(0, 1)[0]
        if (str.length > 0) {
            ans = str + unit + ans;
        }
    }
    return ans.substring(1);
};

坚持努力,无惧未来!