1002 写出这个数 (20分)

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式:

每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 1。

输出格式:

在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。

输入样例:

1234567890987654321123456789
 

输出样例:

yi san wu


/*
读入一个正整数N,计算各位数字之和,用汉语拼音输出和的每一位数字
其中n<10^(100),故使用字符串数组形式存储,其中每个元素为char类型,根据ASCII表,得到对应数字需要 - '0'

每个拼音数字之间有一个空格,最后一个拼音数字之后无空格 ,

这里的问题有两点,

其一是输出问题,结果的长度是不确定的,只能从低位开始存储

其二是空格插入问题,这里总跟随着一个判断,这里的处理方式很多,有的方法很巧妙,值得借鉴
*/

 

#include <stdio.h>
#include <string.h>

char table[][8]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu",32};
int main() 
{
    //输入正整数n 
    char str[102]={0};
    scanf("%s",str);
    //计算各位数字之和 
    int len=strlen(str);
    int i,sum=0;
    for ( i=0 ; i<len ; i++ ) {
        sum += str[i] - '0';
    } 
    //以指定格式输出结果
    int res[100]={0};
    int j;
    //这里不清楚sum的大小,故从sum低位开始从存储,再倒序输出 
    do {
        res[j++] = sum%10;
        sum /= 10;
        //按指定格式输出空格 
        if ( sum != 0 ) {
            res[j++] = 10;
        }
    } while(sum != 0) ;
    int k;
    for ( k=j-1 ; k>=0 ; k-- ) {
        printf("%s",table[res[k]]);
    } 
} 

 

posted @ 2020-03-25 10:24  浣花洗清秋  阅读(142)  评论(0编辑  收藏  举报