1002. 写出这个数 (20)

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

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

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

输入样例:
1234567890987654321123456789
输出样例:
yi san wu

#include<stdio.h>

#define NUM 100

//返回输出的数之和
int Sum_of_num(const char *s)
{ 
    int sum = 0;
    while(*s != '\0')
    {
        sum += *s-'0';
        s++;    
    } 
    return sum;
}
//返回输出数的位数
int Cnt_of_num(int sum)
{
    int i = 10;
    int cnt = 1;
    while(sum/i != 0)
    {
        sum /= i;
        cnt++;
    }
    return cnt; 
}
//输出拼音
void Put_out_chi(int sum,int cnt,char s[][5],int *temp)
{
    int i = cnt;
    int j = sum; //存入sum值之后输出个位
    while(cnt > 0)
    {            //存入temp数组 
        *temp = sum%10;
        sum /= 10;
        temp++;
        cnt--;  
    }
    temp--; 
    cnt++;
    while(cnt != i)
    {               //依次输出到十位
        printf("%s ",s[*temp]);
        temp--;
        cnt++;
    }       
    printf("%s",s[j%10]);
}

int main()
{
    char number[NUM];
    char chinese[][5] = {"ling","yi","er","san","si","wu","liu",
                        "qi","ba","jiu"};
    int temp[10];
    scanf("%s",number);
    int sum,cnt;

    sum = Sum_of_num(number);
    cnt = Cnt_of_num(sum);
    Put_out_chi(sum,cnt,chinese,temp);

    return 0;
 } 

核心函数:

void Put_out_chi(int sum,int cnt,char s[][5],int *temp)

由于用计算机来从最大位开始输出一个“不知道位数”比较难(我不知道怎么做~~),因此选择创建一个temp数组来依次存放从个位开始到最大位的值,之后再通过指针往前移动来输出拼音。由于格式的限制,则留下最后的个位单独输出。

posted @ 2017-10-05 17:59  yinqs1700  阅读(79)  评论(0编辑  收藏  举报