读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
代码:
#include<cmath>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
//观察到数字是10的100次方,所以用整型变量来存储该数字是不可行的
//10的100次方共101位,可以用长度为102的字符型数组来储存
int main() {
char a[110],pinyin[11][10]= {"ling","yi","er","san","si","wu","liu","qi","ba","jiu","shi"};
int sum=0,xiabiao=0,qiuhe[10]={0},i=0;//xiabiao表示数组a的下标
cin>>a;
while(a[xiabiao]!='\0') { //把数字的每一位相加放入n之中
sum+=a[xiabiao]-'0';
xiabiao++;
}
while(sum!=0){//将sum每一位存储进入数组求和之中
qiuhe[i]=sum%10;
sum/=10;
i++;//i里面存储了数组求和的最高的下标,根据调试结果,这里的i会超过数组的最大下标1位
}
for(int k=i-1;k>=0;k--){//这里一定记得数组下标最大位减1
cout<<pinyin[qiuhe[k]];
if(k!=0) cout<<' ';
}
return 0;
}