leetcode:Integer to English Words

本文提供了一种方法将非负整数转换为其英文单词表示,包括单个数字、两位数、三位数及更高位数的数字转换,并通过示例展示了如何将整数转换为对应的英文字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231 - 1.

For example,

123 -> "One Hundred Twenty Three"
12345 -> "Twelve Thousand Three Hundred Forty Five"
1234567 -> "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"

Hint:

  1. Did you see a pattern in dividing the number into chunk of words? For example, 123 and 123000
class Solution {

private:

    string getNum1(int num)
    {
        string retString = "";
        switch (num)
        {
            case 1:
                retString = "One";
                break;
            case 2:
                retString = "Two";
                break;
            case 3:
                retString = "Three";
                break;
            case 4:
                retString = "Four";
                break;
            case 5:
                retString = "Five";
                break;
            case 6:
                retString = "Six";
                break;
            case 7:
                retString = "Seven";
                break;
            case 8:
                retString = "Eight";
                break;
            case 9:
                retString = "Nine";
                break;
        }
        return retString;

    }
    
    string getNum2(int num)
    {
        string retString = "";
        
        switch (num)
        {
            case 2:
                retString = "Twenty";
                break;
            case 3:
                retString = "Thirty";
                break;
            case 4:
                retString = "Forty";
                break;
            case 5:
                retString = "Fifty";
                break;
            case 6:
                retString = "Sixty";
                break;
            case 7:
                retString = "Seventy";
                break;
            case 8:
                retString = "Eighty";
                break;
            case 9:
                retString = "Ninety";
                break;
                
        }
        return retString;
    }

    string getWords(int num)
    {
        string retString = "";
        if (num >= 100)
        {
            retString = getNum1(num/100) + " Hundred";
            num = num % 100;
        }

        if (num >= 10 && num < 20)
        {
            if (retString.size() > 0)
                retString = retString + " ";
            
            if (num == 10)
                retString = retString + "Ten";
            else if (num == 11)
                retString = retString + "Eleven";
            else if (num == 12)
                retString = retString + "Twelve";
            else if (num == 13)
                retString = retString + "Thirteen";
            else if (num == 14)
                retString = retString + "Fourteen";
            else if (num == 15)
                retString = retString + "Fifteen";
            else if (num == 16)
                retString = retString + "Sixteen";
            else if (num == 17)
                retString = retString + "Seventeen";
            else if (num == 18)
                retString = retString + "Eighteen";
            else if (num == 19)
                retString = retString + "Nineteen";
                
            return retString;
        }
        else if (num >= 20)
        {
            if (retString.size() > 0)
                retString = retString + " ";
                
            retString = retString + getNum2(num/10);
            num = num % 10;
        }
        
        if (num > 0)
        {
            if (retString.size() > 0)
                retString = retString + " ";
                
            retString = retString + getNum1(num);
        }
            
        return retString;
    }
    
    string getUnit(int i)
    {
        switch(i)
        {
            case 0: return "";
                break;
            case 1: return " Thousand";
                break;
            case 2: return " Million";
                break;
            case 3: return " Billion";
                break;
        }
        return "";
    }
    
public:
    string numberToWords(int num) {
    
        if (num == 0)
            return "Zero";
    
        string retString = "";
    
        for (int i=0; num>0; i++)
        {
            int remain = num % 1000;
            num = num / 1000;
            
            if (remain != 0)
            {
                if (retString.size() == 0)
                    retString = getWords(remain) + getUnit(i);
                else
                    retString = getWords(remain) + getUnit(i) + " " + retString;
            }
        }
        
        return retString;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值