题目
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10
100
。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
解题过程
数字长度过长,用字符数组
求和,运用循环
输出每个位数对应的拼音,用字符数组存储拼音(下标与拼音对应)
求每个位的数,用while循环
注意末尾没有空格
代码
#include<stdio.h>
int main(){
char str[100000];
//输入正整数
scanf("%s",str);
//计算各位数字之和
int sum=0,i;
for(i=0;str[i]!='\0';i++){
sum+=str[i]-'0';//字符转换为数字
}
//此处可加printf("%d\n",sum);用来查错
//存储每个位的数字
int num[10000]={
0},j=0;
while(sum!=0){
num[j++]=sum%10;//注意此处的j同时记录了数组num里面有几位数
sum/=10;
}
//可用于查错
/*for(i=0;i<j;i++){
printf("%d\n",num[i]);
}*/
//输出对应的拼音
char pinyin[][10]={
"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int flag=1;
for(i=j-1;i>=0;i--){
if(flag==1){
//注意是==而不是=
printf("%s",pinyin[num[i]]);//注意是pinyin[num[i]],而不是pinyin[i]
flag=0;
}
else{
printf(" %s",pinyin[num[i]]);
}
}
printf("\n");
}
另外一种
用switch case
#include<stdio.h>
int main()
{
char s[10000];
int i,j=0,count=0,sum=0,a[10];
scanf("%s",s);
for(i=0; s[i]!='\0'; i++)
sum+=s[i]-'0';
while(sum)
{
a[j]=sum%10;
sum/=10;
j++;
count++;
}
for(j=count-1; j>=0; j--)
{
switch(a[j])
{
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;
}
if(j)
printf(" ");
}
return 0;
}
#include<stdio.h>
#include<math.h>
int main(){
char str[100000];
scanf("%s",str);
//求和
int j;
long long sum=0;
for(j=0;str[j]!='\0';j++){
sum+=str[j]-'0';
}
//查错printf("%lld\n",sum);
//求有几位数
int i=0,n=sum;
while(n){
n/=10;
i++;
}
//查错printf("%d\n",i);
//输出
while(i){
int temp=(int)pow(10,i-1);
i--;
//查错printf("%d\n",i);
//查错printf("%lld\n",sum);
//查错printf("%d %d\n",temp,i);
int end=sum/temp;
sum%=temp;
//查错printf("%d\n",end);
//查错printf("%d\n",sum);
switch(end){
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;
}
if(i!=0){
printf(" ");
}
}
printf("\n");
}