leetcode:Integer to English Words

来源:互联网 发布:天天向上网络版权费 编辑:程序博客网 时间:2024/05/16 13:02

 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;    }};


0 0
原创粉丝点击