读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式: 每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10 100 。
输出格式: 在一行内输出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 }