写出这个数
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。
输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
这道题首先要明白n的范围已经超过了普通的类型,所以肯定要利用字符数组来进行处理。
其次在求得和之后,输出有两种方法,如果是用sprintf较为简单,但另一种方法也应当掌握。即相当于知道结果的位数,然后除以10的n次方从而得到每一位的值。
#include <stdio.h>
void outPut(int sum)
{
int k = 1;
int ans;
int t = sum;
while (sum > 9) //判断和的位数
{
k *= 10;
sum /= 10;
}
/*之前不知道有sprintf这个函数,用这个会简便很多,就不用这样求每一位了
spsprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。
最常用的就是把整数打印到字符串中*/
while (k > 0) //分别计算每一位
{
ans = t / k;
t %= k;
k /= 10;
switch (ans)
{
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 (k > 0) printf (" ");
}
}
int main ()
{
char c[101] = {0};
gets (c);
int i = 0,sum = 0;
while (c[i] != ‘\0‘)
{
sum += c[i] - ‘0‘;
i ++;
}
outPut (sum);
// printf ("%d",sum);
return 0;
}
原文:http://www.cnblogs.com/annfly/p/5011406.html