题目:
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
代码实现:
#include<stdio.h>
#include<string.h>
int main(){
int sum=0;
/*【法1】读入一个正整数 n,计算其各位数字之和
char ch;
ch=getchar();
while(ch!='\n'){
switch(ch){
case '1':sum+=1;
break;
case '2':sum+=2;
break;
case '3':sum+=3;
break;
case '4':sum+=4;
break;
case '5':sum+=5;
break;
case '6':sum+=6;
break;
case '7':sum+=7;
break;
case '8':sum+=8;
break;
case '9':sum+=9;
}
ch=getchar();
}
printf("%d",sum);
*/
//【法2】
char x[100];
int i;
scanf("%s",x);
for(i=0;x[i]!='\0';i++){
sum+=(x[i]-'0');
}
//printf("%d\n",sum);
//用汉语拼音写出和的每一位数字
int y;
char arr[10][10];
i=0;//记录每位数字顺序,后逆序输出
while(sum){
y=sum%10;
switch(y){
case 0:strcpy(arr[i],"ling");break;
case 1:strcpy(arr[i],"yi");break;
case 2:strcpy(arr[i],"er");break;
case 3:strcpy(arr[i],"san");break;
case 4:strcpy(arr[i],"si");break;
case 5:strcpy(arr[i],"wu");break;
case 6:strcpy(arr[i],"liu");break;
case 7:strcpy(arr[i],"qi");break;
case 8:strcpy(arr[i],"ba");break;
case 9:strcpy(arr[i],"jiu");break;
}
i++;
sum/=10;
}
i--;//最后多加1再减去,还原
//拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格
for(;i>0;i--)
printf("%s ",arr[i]);
printf("%s",arr[0]);
return 0;
}
小结:
- 输入数据过大时可以考虑用字符串转换;
-
VC6.0++不支持long
long 整型; - 单独数字如:10,在编译器中默认整型(int),10L为长整型;
- 存放字符串可以考虑二维数组。
版权声明:本文为xiaoyeren_ITRoad原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。