3,881
社区成员
发帖
与我相关
我的任务
分享
#pragma warning(disable:4996)
#include <stdio.h>
char *NUMBERS_UP_TO_20[] ={
"zero" ,"one" ,"two" ,"three" ,"four" ,
"five" ,"six" ,"seven" ,"eight" ,"nine" ,
"ten" ,"eleven" ,"twelve" ,"thirteen","fourteen",
"fifteen","sixteen","sventeen","eighteen","nineteen",
};
char *NUMBERS_MULTIPLE_OF_10[] ={
"twenty", "thirty" , "fourty", "fifty" ,
"sixty" , "seventy", "eighty", "ninety",
};
char *NumberToString(long long int nNum,char *p) {
char *q;
int n;
long long int nCrntNumber;
q=p;
if (nNum<0) return "";
if (nNum<20) return NUMBERS_UP_TO_20[nNum];
nCrntNumber=nNum/1000000000;
if (nCrntNumber>0) {
n=sprintf(p,"%s billion ",NumberToString(nCrntNumber,p));
p+=n;
nNum%=1000000000;
}
nCrntNumber=nNum/1000000;
if (nCrntNumber>0) {
n=sprintf(p,"%s million ",NumberToString(nCrntNumber,p));
p+=n;
nNum%=1000000;
}
nCrntNumber=nNum/1000;
if (nCrntNumber>0) {
n=sprintf(p,"%s thousand ",NumberToString(nCrntNumber,p));
p+=n;
nNum%=1000;
}
nCrntNumber=nNum/100;
if (nCrntNumber>0) {
n=sprintf(p,"%s hundred ",NumberToString(nCrntNumber,p));
p+=n;
nNum%=100;
}
if (0<nNum && nNum<20) {
n=sprintf(p,"%s ",NumberToString(nNum,p));
p+=n;
} else {
nCrntNumber=nNum/10;
if (nCrntNumber>0) {
n=sprintf(p,"%s ",NUMBERS_MULTIPLE_OF_10[nCrntNumber-2]);
p+=n;
nNum%=10;
}
nCrntNumber=nNum;
if (nCrntNumber>0) {
n=sprintf(p,"%s ",NumberToString(nCrntNumber,p));
p+=n;
}
}
if (p[-1]==' ') p[-1]=0;
return q;
}
int main() {
char sRes[256];
long long int d;
d= 0 ;printf("%19lld is [%s]\n",d,NumberToString(d,sRes));
d= 1 ;printf("%19lld is [%s]\n",d,NumberToString(d,sRes));
d= 9 ;printf("%19lld is [%s]\n",d,NumberToString(d,sRes));
d= 19 ;printf("%19lld is [%s]\n",d,NumberToString(d,sRes));
d= 20 ;printf("%19lld is [%s]\n",d,NumberToString(d,sRes));
d= 21 ;printf("%19lld is [%s]\n",d,NumberToString(d,sRes));
d= 90 ;printf("%19lld is [%s]\n",d,NumberToString(d,sRes));
d= 100 ;printf("%19lld is [%s]\n",d,NumberToString(d,sRes));
d= 2000 ;printf("%19lld is [%s]\n",d,NumberToString(d,sRes));
d= 3000000 ;printf("%19lld is [%s]\n",d,NumberToString(d,sRes));
d= 4000000000ll;printf("%19lld is [%s]\n",d,NumberToString(d,sRes));
d=1000000000000000002ll;printf("%19lld is [%s]\n",d,NumberToString(d,sRes));
d=1234567890123456789ll;printf("%19lld is [%s]\n",d,NumberToString(d,sRes));
d=9223372036854775807ll;printf("%19lld is [%s]\n",d,NumberToString(d,sRes));//2^63-1
return 0;
}
// 0 is [zero]
// 1 is [one]
// 9 is [nine]
// 19 is [nineteen]
// 20 is [twenty]
// 21 is [twenty one]
// 90 is [ninety]
// 100 is [one hundred]
// 2000 is [two thousand]
// 3000000 is [three million]
// 4000000000 is [four billion]
//1000000000000000002 is [one billion billion two]
//1234567890123456789 is [one billion two hundred thirty four million five hundred sixty seven thousand eight hundred ninety billion one hundred twenty three million four hundred fifty six thousand seven hundred eighty nine]
//9223372036854775807 is [nine billion two hundred twenty three million three hundred seventy two thousand thirty six billion eight hundred fifty four million seven hundred seventy five thousand eight hundred seven]
//
有木有觉得在本ID的嘴里“仅供参考”就和“芝麻开门”一样灵验?