> 文档中心 > PAT (Basic Level) Practice (中文)1002 写出这个数

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

图片来源于pta 

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

输入格式:

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

输出格式:

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

输入样例:

1234567890987654321123456789//结尾无空行

输出样例

yi san wu//结尾无空行

 思路

 先观察这道题,数字的长度明显超出int的范围,所以使用字符数组输入,输入一个字符就减'0',将它们加起来,就得到了每个数字之和

再定义一个int 数组,将上面得到的和全部拆分为单个数字,得到各个位数存储在数组里面

我们存储时是现将个位数存储的,比如123,拆分各个位数存储到数组里面就是a[0]对应的是3,a[1]对应的是2, a[2]对应的是1

从数组输出数字,当然要从后往前输出,每遍历一个数字就要去输出存储拼音的数组里对应的拼音

 代码(C)

#includechar py[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};//数字的拼音的二维数组表,py[n][5]="n的拼音";int main(){    char ch;    int num=0;    while((ch=getchar())!='\n'){//将输入数字当单个字符处理,直到输入回车为止:输入的同时计算各位数之和 num+=ch-'0';    }    int temp[100],n;    for(n=0;num>0;n++){//拆分得到的和的各位数 temp[n]=num%10;//将各个位数存储到数组里 num/=10;    }    for(int i=n-1;i>=0;i--){//按拼音的二维数组表对应输出拼音 if(i > 0) printf("%s ",py[temp[i]]);else printf("%s",py[temp[i]]);    }    return 0;}

 第一次写文章,如有错误请见谅

4万个成语大全