题解 | #学英语#

学英语

https://www.nowcoder.com/practice/1364723563ab43c99f3d38b5abef83bc

看了好多题解发现都用到了二维数组,对于新手来说容易搞混淆
写了一个思路较为清晰的题解
通过题目可以发现不论是million还是thousand前面的几百都是一样处理的,所以把三个数当做一个整体进行处理,即假如561这三个数或者061或者001,这三种情况可以很简单的在一个函数中用if语句进行分类,于是整个题目就分为了处理三组三位数的题目,中间的单位可以通过分类解决,即001 million 021 thousand 561 这种形式,较为简便
需要注意的tips:
1.将and跟随hundred之后一同输出,即可解决如果出现1011这种数不加and
2.十几需要单独讨论,twenty one,thirsty one这种很好处理,但是11是eleven
3.把输入当做一个整体来看的话需要用长整型数据,因为用int的话会溢出
#include <stdio.h>
void eng(long x);
void and(int x);
int main() {
    long x;
    scanf("%ld", &x);
    if(x>=1000000)
    {   
        eng(x/1000000);
        printf("million ");
    }
    if((x%1000000)/1000!=0)
    {
        and((x%1000000)/1000);\
        printf("thousand ");
    }
    if((x%1000)!=0)
    {
        and(x%1000);
    }
    return 0;
}
void and(int x)
{
    if(x/100!=0)
    {
        if(x%100==0)
        {
            eng(x/100);
            printf("hundred ");
        }    
        else
        {
            eng(x/100);
            printf("hundred and ");
            eng(x%100);
            
        }
    }
    else {
        eng(x%100);
    }
    
        
}
void eng(long x)
{   
    if(10<x&&x<20)
    {
        switch(x){
            case 11: printf("eleven "); break;
            case 12: printf("twelve "); break;
            case 13: printf("thirteen "); break;
            case 14: printf("fourteen "); break;
            case 15: printf("fifteen "); break;
            case 16: printf("sixteen "); break;
            case 17: printf("seventeen "); break;
            case 18: printf("eighteen "); break;
            case 19: printf("nineteen "); break;
            default:printf("error1\n"); break;
        }
    }
    else{
        switch(x/10)
        {
            case 1: printf("ten "); break;
            case 2: printf("twenty "); break;
            case 3: printf("thirty "); break;
            case 4: printf("forty "); break;
            case 5: printf("fifty "); break;
            case 6: printf("sixty "); break;
            case 7: printf("seventy "); break;
            case 8: printf("eighty "); break;
            case 9: printf("ninety "); break;
            case 0: break;
            default:printf("error2\n"); break;
        }
        switch(x%10)
        {
            case 1: printf("one "); break;
            case 2: printf("two "); break;
            case 3: printf("three "); break;
            case 4: printf("four "); break;
            case 5: printf("five "); break;
            case 6: printf("six "); break;
            case 7: printf("seven "); break;
            case 8: printf("eight "); break;
            case 9: printf("nine "); break;
            case 0: break;
            default:printf("error3\n"); break;
        }   
        
    
    }
}

#华为机试HJ42#
全部评论

相关推荐

11-07 16:07
深圳大学 运营
前端飞升:学长,阿里不是卡双非吗,我深也能去吗
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务