今天碰到这个题,考到许多小知识点,可为难死博主了。
废话不多说,上题
写出这个数
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。
输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1 |
1234567890987654321123456789 |
输出样例:
1 |
yi san wu |
题目解析
输入一个数n,n小于10100
所以我们的n就不能用int定义了,最好选择用字符数组定义
输出的是n的各位之和,但是要用拼音表示所输出的数的每一位
即:如图

程序详解流程图

代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#include<stdio.h> int main() { char* res[]={"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu", "shi"}; //定义1-10拼音数组 char num[100]; //用于存放输入的n scanf("%s", &num); int sum=0, i=0, c=0, j=0, b[3]={0}; while(num[i]!='\0')//求和 ,和的范围为(0-900) { sum+=num[i]-'0'; //字符变整型 i++; } for(j=0; j<3; j++)//拆分并保存至长度为3的b数组 { b[j]=sum%10; sum/=10; if(sum==0) break; } while(j>=0) { if(j>0) printf("%s ", res[b[j]]); else printf("%s\n", res[b[j]]);//保证输出格式 j--; } return 0; // } |
其他代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#include<stdio.h> #include <stdlib.h> #include <string.h> void printf_num(int num) { int zonghe[10]; char *name[] ={"ling","yi","er","san","si","wu","liu","qi","ba","jiu","shi"}; int i=0; for(i=0;num>=10;i++){ zonghe[i]=num%10; num=num/10; } zonghe[i++]=num; while(i--){ if(i!=0){ printf("%s ",name[zonghe[i]]); }else{ printf("%s\n",name[zonghe[i]]); } } } int main(){ char n[100]; char *p=n; int sum=0; int i=0; scanf("%s",n); while(*p!='\0'){ sum = sum + (*p - '0'); //(*p - '0')将字符型数字转化为整型数字 p++; } printf_num(sum); return 0; } |
运行截图

注意事项
1.拼音不要写错
2.输出格式要牢记,以及%c ,%s的应用
3.return 0;
本次分享就到这里,如有兴趣请关注小文’s blog
如果你有C语言难题可以在评论区留言,博主将在第二天为您讲解
如有任何意见请留言或者评论,本人一定采取。