1.使用unsigned long long 的最大值为(运行平台vs2008)18446744073709551615, 所以该程序能解析的数值为0-18446744073709551615
2.英语三位计数法,thousand, million,billion,trillion, thousand trillion, million trillion, billion trillion,trillion trillion...
3.程序对负数没有解析,但解析也很容易,只需做小幅改动即可
C++代码如下:
#include <iostream>
#include <string>
using namespace std;
const string dictA[]={
"Zero", "One", "Two", "Three", "Four",
"Five", "Six", "Seven", "Eight", "Nine",
"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen",
"Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"
};
const string dictB[]={
"Zero", "Ten", "Twenty", "Thirty", "Forty",
"Fifty", "Sixty", "Seventy", "Eighty", "Ninety"
};
const string dictC[]={
"", "Thousand", "Million", "Billion", "Trillion"
"Thousand Trillion", "Million Trillion", "Billion Trillion"
};
string translate(unsigned int val){
string s = "";
unsigned int v = val % 100;
if(v <= 19)
s = dictA[v];
else if(v > 19 && v % 10 == 0)
s = dictB[v / 10];
else
s = ((v / 10)? dictB[v / 10] + "-" : "") + dictA[v % 10];
s = ((val / 100)? dictA[val / 100] + " Hundred and " : "") + s;
return s;
}
int main(){
string result = "";
unsigned long long val = 0;
cin>>val;
int i=0;
do{
if(i != 0)
result = dictC[i] + " " +result;
result = translate(val % 1000) + " " + result;
val = val / 1000;
++i;
}while(val != 0);
cout<<result<<endl;
return 0;
}
测试结果:
个位数:
十位数:
百位数:
其他:
目前能翻译的最大整数:ULLONG_MAX