1002. 写出这个数

来源:互联网 发布:成都中科大cms漏洞 编辑:程序博客网 时间:2024/06/05 11:40

原题描述如下:

读入一个自然数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;}