原题描述如下:
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。
输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:1234567890987654321123456789输出样例:
yi san wu
大概思路就是先求和然后输出对应的拼音。
#include <stdio.h>
int main ( )
{
char n;
int sum = 0 ;
char *py[ 10 ] = {"ling", "yi" , "er", "san" , "si" , "wu", "liu", "qi", "ba", "jiu" };
while ( (n = getchar() ) != '\n' )
sum += n - '0' ;
if ( sum / 100 )
printf("%s ",py[ sum/100 ] );
if ( sum /10 )
printf("%s ",py[ sum /10 %10 ] );
if ( sum % 10 )
printf("%s\n",py [ sum % 10 ] );
return 0;
}
一开始定义的是char py[ ] 一直报错,原来这是字符串型的数组(字符指针数组)元素为字符串(字符指针)
或者定义一个二维数组,一个汉字最多占三个字节,加上字符串结束符最多七个字节,可定义为char py[ ] [ 7 ] = {"ling", "yi" , "er", "san" , "si" , "wu", "liu", "qi", "ba", "jiu" };
后来发现输出一直对应多了一 明明是三输出si,发现少些了ling这个字符串。
但还是不对。。。有一个值错误
if语句里的个位其实不用判断,否则为零时会没有输出
#include <stdio.h>
int main ( )
{
char n;
int sum = 0 ;
char *py[ 10 ] = {"ling", "yi" , "er", "san" , "si" , "wu", "liu", "qi", "ba", "jiu" };
while ( (n = getchar() ) != '\n' )
sum += n - '0' ;
if ( sum / 100 )
printf("%s ",py[ sum/100 ] );
if ( sum /10 )
printf("%s ",py[ sum /10 %10 ] );
printf("%s\n",py [ sum % 10 ] );
return 0;
}