题解 | #学英语#
学英语
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; }