读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
注意输出结果之间有空格,你可能就错这
- 做一个int的while循环求和函数返回到主函数注意循环结束条件,这里我用的是
getchar()
每次只从缓存区读入一个字符并返回这一个字符
- 做一个switch函数对每一个传进来的数字输出一个类似的”yi“等等
- 做一个函数对计算结果判断并调用下个switch函数一个个输出
注意在输出之间的空格
#include<stdio.h>
#include<stdlib.h>
void xuanze(int choose);
void shuchu(int sum);
int jisuan();
int main()//主函数
{
int sum;
sum=jisuan();
shuchu(sum);
}//
int jisuan()
{
int n,sum=0;
while((n=getchar())!='\n')//你在控制台的回车也算一个字符'\n'
{ n=n-'0';
sum=sum+n;
}
return sum;
}
void shuchu(int sum)//对每次计算结果判断并调用下个switch函数后输出结果
{ int i,j,k;
if(sum<1000&&sum>=100){
i=sum/100;
j=(sum-i*100)/10;
k=(sum-i*100)-j*10;
xuanze(i);
printf(" ");
xuanze(j);
printf(" ");
xuanze(k);
}else if(sum>=10){
i=sum/10;
j=sum-i*10;
xuanze(i);
printf(" ");
xuanze(j);
}else{
xuanze(sum);
}
}
void xuanze(int choose)//选择函数
{
switch(choose)
{
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;
}
case 0:{
printf("ling");
break;
}
}
}
后面发现一种更好的转载自陈粑粑的小白鞋
用了一个更好的函数sprintf和字符串数组来解
#include<stdio.h>
#include<stdlib.h>
int main()
{ char s[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int sum,n;
char num[4];
while((n=getchar())!='\n')//你在控制台的回车也算一个字符'\n'
{ n=n-'0';
sum=sum+n;
}
sprintf(num,"%d",sum);
for(int i=0;num[i]!=0;i++)
{
printf("%s",s[num[i]-'0']);
if(num[i+1]!=0)
{
printf(" ");
}
}
}