题解 | #学英语#
学英语
https://www.nowcoder.com/practice/1364723563ab43c99f3d38b5abef83bc
#include <stdio.h>
#include <string.h>
char changeResult[200]={0};//结果字符串
char map[1000][50]={0};//三位数字典,每个三位数都对应一个字符串
void ChangeDigitToWord(long int num)//三位数字转换成字符串
{
if(num!=0)
{
strcat(changeResult,map[num]);
}
}
void CreateMap()//构建字典
{
char tmpOneToNineteenMap[20][20]={"0","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"};
char tmpTwentyToNinetyMap[10][20]={"1","2","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"};
for(int i=0;i<20;i++)
{
strcpy(map[i],tmpOneToNineteenMap[i]);
}
for (int i=20;i<100;i++)
{
if(i%10==0)//整十忽略个位的零
{
sprintf(map[i],"%s",tmpTwentyToNinetyMap[i/10]);
}
else{
sprintf(map[i],"%s %s",tmpTwentyToNinetyMap[i/10],tmpOneToNineteenMap[i%10]);
}
}
for (int i=100;i<1000;i++)
{
if(i%100==0)//整百忽略十位和个位的零
{
sprintf(map[i],"%s hundred",tmpOneToNineteenMap[i/100]);
}
else{
sprintf(map[i],"%s hundred and %s",tmpOneToNineteenMap[i/100],map[(i%100)]);
}
}
}
int main() {
long int number=0;
scanf("%d",&number);
long int tmpNum=number;
tmpNum=number;
//构建字典
CreateMap();
if(tmpNum/(1000*1000*1000)!=0)//判断是否存在十亿以上的部分
{
ChangeDigitToWord(tmpNum/(1000*1000*1000));
strcat(changeResult," billion ");
}
if((tmpNum%(1000*1000*1000))/(1000*1000)!=0)//判断是否存在百万以上的部分
{
ChangeDigitToWord((tmpNum%(1000*1000*1000))/(1000*1000));
strcat(changeResult," million ");
}
if((tmpNum%(1000*1000))/1000)//判断是否存在千以上的部分
{
ChangeDigitToWord((tmpNum%(1000*1000))/1000);
strcat(changeResult," thousand ");
}
if(tmpNum%1000!=0)//判断是否存在千以下部分,注意题中不会输入0,所以四个判断一定有至少一个是ture
{
ChangeDigitToWord((tmpNum%(1000)));
}
printf("%s",changeResult);
return 0;
}

vivo公司福利 365人发布
查看5道真题和解析