PAT(Basic Level) Practice——1002 写出这个数

版权声明:余生请多指教,欢迎交流学习: https://blog.csdn.net/LYS20121202/article/details/81255088

原题目:

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

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

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

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

 分析:

  1.  对于最大为10的100次方的大数,普通的方式不好存储,我们采用字符串保存。【gets(ch);】
  2. 由于字符采用ASC II 码值的保存方式,每位数字字符减去字符0的ASC II 码值即可即可得到每位的数值,再求和即可求得各位数字之和。
  3. 输入之数每位数字最大之和不超过900,故可以省力直接将和的百十个位直接分解,若其他题目可能出现较大数,可采用数组保存每位的数。
  4. 对于百位和十位有可能出现0的情况进行讨论,个位则可以直接在最后打印
百位十位分情况讨论
百位 十位 处理
为0 为0 无操作
为0 非0 打印十位
非0 为0 依次打印百位十位
非0 非0 依次打印百位十位

      5.每个数字的中文保存成字符串数组,最后直接调用打印,注意每个中文数字后有空格,但最后一个没有。

代码:

C语言版:

#include <stdio.h>
#include <string.h>
int main()
{
    //用于保存输入的数,直接存为字符串
    char ch[101];
    //将中文数字直接保存为字符串数组,需要时直接使用,从0开始到9,方便调用,因为数组下标从0开始
    char Num[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    int i,j,k,p=0;
    gets(ch);
    for(i=0;i<strlen(ch);i++)
    {
        //将字符串中的每一位减去字符'0'的ASC ii码值,即可得到每一位的大小,并与之前的数求和保存
        p+=ch[i]-'0';
    }
    //直接分解,百位为i,十位为j,个位为k,也可以采用数组保存
    i=p/100;
    j=(p/10)%10;
    k=p%10;
    //分情况处理,打印结果
    if(i==0&&j==0)
    {
        //
    }
    else if(i==0&&j!=0)
    {
        printf("%s ",Num[j]);
    }
    else
    {
        printf("%s ",Num[i]);
        printf("%s ",Num[j]);
    }
    printf("%s",Num[k]);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/LYS20121202/article/details/81255088