题解 | #学英语#

学英语

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;
}

全部评论

相关推荐

01-18 09:26
已编辑
门头沟学院 Java
王桑的大offer:建议中间件那块写熟悉即可,写掌握 面试包被拷打到昏厥
点赞 评论 收藏
分享
数开小菜鸡:你是我今早见过的最美的牛客女孩......
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务