读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
题目比较简单。对于拼音的翻译,最好的方法是采用数组来写。我第一反应想到的是switch-case就直接写了,都可以。
题目的坑在于测试点(1):需要留意 “和是三位数,但是十位数为0的情况!”
#include<stdio.h>
#include<string.h>
//48~57为0到9十个阿拉伯数字
//测试点1没通过!!:注意 sum 为三位数但十位为 0 时的情况。
void print(int a){
switch(a){
case 0:
printf("ling");
break;
case 1:
printf("yi");
break;
case 2:
printf("er");
break;
case 3:
printf("san");
break;
case 4:
printf("si");
break;
case 5:
printf("wu");
break;
case 6:
printf("liu");
break;
case 7:
printf("qi");
break;
case 8:
printf("ba");
break;
case 9:
printf("jiu");
break;
}
}
int main(){
char num[101];
int a, sum = 0;
gets(num);
for(int i = 0; i < strlen(num); i++){
sum += (num[i]-48);//sum += (int(num[i])-48);这样pta会报错!!!牛客居然也不支持,这种转换已经不能用了?直接用num[i]参与数学运算其实就ok了
}
for(int i = 0; i < 3; i++){
if(sum > 100){
print(sum / 100); printf(" ");
sum = sum - 100*(sum/100);
if(sum < 10) printf("ling ");//针对测试点1: sum 为三位数但十位为 0 时的情况。
}
else if(sum > 10){
print(sum / 10); printf(" ");
sum = sum - 10*(sum/10);
}
else{
print(sum % 10); printf("\n");
break;
}
}
return 0;
}