读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。
输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
1 #include <stdio.h> 2 #include <string.h> 3 #define N 1000 4 5 void read(int sum); //读出函数声明 6 7 int main() 8 { 9 char str[N]; //要输入一个小于1000位的数字,显然不能用int,在这里定义一个str字符数组接收输入的数字 10 gets(str); //使用gets输入这个全是数字的字符串 11 int len; //len表示str字符串的长度(也就是数字的个数) 12 len = strlen(str); //使用strlen函数可以直接测出len的大小 13 int i, sum = 0; //sum为各位数字的和 14 for(i = 0;i < len;i++) { //从第一个数字开始遍历到最后一个数字 15 sum += str[i] - '0'; //因为str为字符数组,所以str【i】-‘0’就等于str【i】数字的大小 16 } 17 18 read(sum); //读出函数 19 20 return 0; 21 } 22 23 void read(int sum) //读出函数 24 { 25 int i; 26 //因为下面要算sum的每位数的大小,mask为10的(sum的位数(几位数)次方减一 ) 27 //如:sum为三位数,mask为10,sum/mask就等于sum的首位 ,现初始为一 28 int mask = 1; 29 int t = sum; 30 while(t > 9) { //t循环了sum的位数减一遍 31 t /= 10; 32 mask *= 10; 33 } 34 35 //定义一个指针数组,数组中的每一个元素都是指针 36 char *c[10] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; 37 //循环sum的位数次,并输出每位 38 do { 39 i = sum / mask; 40 printf("%s",c[i]); 41 if(mask > 9) { 42 printf(" "); 43 } 44 sum %= mask; 45 mask /= 10; 46 } while(mask > 0); 47 }