careercup-中等难度 17.7

17.7 给定一个整数,打印该整数的英文描述(例如“One Thousand,Two Hundred Thirty Four”)。

解法:

举个例子,在转换19 323 984时,我们可以考虑分段处理,没三位转换一次,并在适当的地方插入“thousand”(千)和“million”(百万)。也即,

convert(19 323 984)=convert(19)+ “ million ”+convert(323)+“ thousand ”+convert(984);

 

C++实现代码:

#include<iostream>
#include<string>
using namespace std;

string digits[10]={"One","Two","Three","Four","Five","Six","Seven","Eight","Nine"};

string teens[10]={"Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen"};

string tens[10]={"Ten","Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"};

string big[10]={"","Thousand","Million"};

string numToString100(int number)
{
    string str;
    if(number>100)
    {
        str+=digits[number/100-1]+" Hundred ";
    }
    number%=100;
    if(number>=11&&number<=19)
    {
        return str+teens[number-11]+" ";
    }
    else if(number==10||number>=20)
    {
        str+=tens[number/10-1]+" ";
        number%=10;
    }
    if(number>=1&&number<=9)
    {
        str+=digits[number-1]+" ";
    }
    return str;
}
string  numToString(int number)
{
    if(number==0)
    {
        return "Zero";
    }
    else if(number<0)
    {
        return " Negative "+numToString(-1*number);
    }
    int count=0;
    string str=" ";
    while(number>0)
    {
        if(number%1000)
        {
            str=numToString100(number%1000)+big[count]+" "+str;
        }
        number/=1000;
        count++;
    }
    return str;
}

int main()
{
    cout<<numToString(1109);
}

 

posted @ 2014-12-13 09:45  Jessica程序猿  阅读(169)  评论(0编辑  收藏  举报