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