1.思路
这题看到网上有许多方法,我是这样想的,先将所有位上的数的和求出来,再去用中文拼音表示出这个数字,刚开始做的时候以为这个和不止三位,=。=,AC之后才发现确实只有3位,或者2位,或者1位,那么就不用考虑的那么复杂了,求出来之后直接分解就好。1.求和部分,受y总高精度加法的启发,感觉直接读入字符串,然后通过头文件"vector"里面的size(),存储直接用向量来存就可了,这样表示比较方便,将字符串中的数字一个个转换成数组里的数后再求和就好了。2.拼音表示部分,用字符数组储存好拼音(不太会*),后续输出注意空格。贴个代码
#include <iostream>
#include <vector>
using namespace std;
char s[][10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu","shi"};//定义该数组,注意是二维的
int main()
{
string a ;
int sum=0;
int k,i,copy,n;
vector<int> A;//定义vector存储后面加进来的数
cin >> a; //直接cin吧,方便点
for(i =0;i<a.size();i++) A.push_back(a[i]-'0'); //数字转换然后加进去
for(i =0;i<A.size();i++) sum+=A[i]; //求所有位数的和
if(sum/100>0&&sum/100<=9) //3位
{
printf("%s ",s[sum/100]);
printf("%s ",s[sum%100/10]);
printf("%s",s[sum%10]);
}
else if(sum/10>0&&sum/10<=9) //2位
{
printf("%s ",s[sum/10]);
printf("%s",s[sum%10]);
}
else //1位
printf("%s",s[sum]);
return 0;
}
2.小结
PTA乙级真题的第二题,这题说实话没想到的是最后这个分解原来只有三位,求和的话我觉得这种方法求长整数所有位数上数字的和比较方便,高精度算法中也能用到这种方法。(->戳y总) 2020/10/16