题意:给定一个阿拉伯数字,输出对应的英文表示。
思路:很简单,每三位为一组,首先返回这三位的表示,然后再加上对应的Thousand,Million之类的。如果那三位是0,返回“”
有几个坑:
1、如果该数本身就是0,返回Zero
2、要注意空格,两种情况:
情况1:比如每三位的那一组,或许是几百几十
情况2:比如整个数或许就是几千(没零头)。
下面的代码都有注释,对应的哪些情况。
代码:
class Solution {
public:
string numberToWords(int num) {
int i,j,k;
vector<string> ss;
string s,temp,ans;
if(num==0) return "Zero";
for(i=0;i<4;i++)
{
temp=check(num%1000);
ss.push_back(temp);
num=num/1000;
}
if(ss[3]!="") ans+=ss[3]+" Billion ";
if(ss[2]!="") ans+=ss[2]+" Million ";
if(ss[1]!="") ans+=ss[1]+" Thousand ";
if(ss[0]!="") ans+=ss[0];
if(ans[ans.length()-1]==' ') return ans.substr(0,ans.size()-1);//情况2
return ans;
}
string check(int num)
{
string temp="";
int bai=0,shi=0,ge=0;
string ones[12]={"","One","Two","Three","Four","Five","Six","Seven","Eight","Nine"};
string tens[12]={"","","Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"};
string onetens[12]={"Ten","Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen"};
if(num==0) return "";
ge=num%10;
shi=(num/10)%10;
bai=num/100;
if(bai>0)
{
temp+=(ones[bai]+" Hundred");
if(shi*10+ge!=0) temp+=" ";//情况1
}
if(shi==1) temp+=onetens[ge];
else if(shi>=2)
{
temp+=tens[shi];
if(ge!=0)//情况1
{
temp+=" ";
temp+=ones[ge];
}
}
else temp+=ones[ge];
return temp;
}
};