输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于1000(说好的1000?)。
输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
char n[1000];//由于题目要求的数字太长,只能用字符串数组
int sum = 0;//用于计算各位之和
int m;//用于计算数字的位数
char str[20];
gets(n);//输入
m = strlen(n);//得到输入的数字位数
//printf("位数为:%d\n",m);
for(int i = 0;i < m;i++){//遍历数组并计算出各位之和
sum+=n[i]-'0';
}
//printf("各位数字之和为:%d\n",sum);
//itoa(sum,str,10);//因为C++不支持,下面与之等价
snprintf(str, sizeof(str), "%d", sum);
//printf("%s\n",str);
m = strlen(str);
for(int j = 0;j < m;j++){//遍历数组并打印
switch(str[j]){
case '0':
if(str[j+1] == '\0'){
printf("ling\n");
}else{
printf("ling ");//输出后面有个空格,不能用\t
}
break;
case '1':
if(str[j+1] == '\0'){
printf("yi\n");
}else{
printf("yi ");
}
break;
case '2':
if(str[j+1] == '\0'){
printf("er\n");
}else{
printf("er ");
}
break;
case '3':
if(str[j+1] == '\0'){
printf("san\n");
}else{
printf("san ");
}
break;
case '4':
if(str[j+1] == '\0'){
printf("si\n");
}else{
printf("si ");
}
break;
case '5':
if(str[j+1] == '\0'){
printf("wu\n");
}else{
printf("wu ");
}
break;
case '6':
if(str[j+1] == '\0'){
printf("liu\n");
}else{
printf("liu ");
}
break;
case '7':
if(str[j+1] == '\0'){
printf("qi\n");
}else{
printf("qi ");
}
break;
case '8':
if(str[j+1] == '\0'){
printf("ba\n");
}else{
printf("ba ");
}
break;
case '9':
if(str[j+1] == '\0'){
printf("jiu\n");
}else{
printf("jiu ");
}
break;
default:
printf("出现错误");
}
}
}