题意:读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10^10
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。
输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。
说实话,这道题很水,但是对于刚接触编程的学者来说,作为练习还是可以的。因为要求学者的逻辑思维要清楚,这点很重要,不管是简单的,还是复杂的程序,都需要我们清晰的梳理自己的思维,才不会出现“明明样例都过了,为什么提交就WA呢”?出现这种情况,大部分原因是我们的逻辑不够清晰,不够完整。
这道题考的是将数字的各位数字以拼音的形式输出来。
第一步:分解数字;
对于刚入门的学者可能会想到分情况讨论;这个方法在这道题可以用,因为n不超过10的100次方,所以最大的sum不会超过909,;但是我不推荐大家用这种方法,因为它并不通用,当一个数的值更大的时候,你分类的情况就更多了,代码冗长,也不易于发现问题。
其实我们直接用一个while循环就可以解决。(注意sum为0时要特殊处理)
if(sum==0)
cout<<a[0]<<endl;
else {
while(sum!=0) {
b[k++]=sum%10;
sum=sum/10;
}
for(int j=k-1; j>0; j--)
cout<<a[b[j]]<<" ";
cout<<a[b[0]];//为了防止最后一个拼音后有空格
}
第二步:将数字以拼音形式呈现;
很简单,直接用一个字符串数组解决,
string a[10]= {“ling”,“yi”,“er”,“san”,“si”,“wu”,“liu”,“qi”,“ba”,“jiu”};
其实这种用常量数组实现对应关系的方法很常见,大家可以多学学!
为了便于道友们向我咨询问题,特意开设了一个免费的知识星球——CaptianXue,星球提供学习、理财、生活、职场等各类文章和免费答疑!!
直接上代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
string a[10]= {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int main() {
int sum=0,len,i;
string str;
cin>>str;
len=str.length();
for(i=0; i<len; i++) {
sum=sum+str[i]-'0';
};
int b[4];//存储sum的每位数
int k=0;//sum的每位数的下标
if(sum==0)
cout<<a[0]<<endl;
else {
while(sum!=0) {
b[k++]=sum%10;
sum=sum/10;
}
for(int j=k-1; j>0; j--)
cout<<a[b[j]]<<" ";
cout<<a[b[0]];//为了防止最后一个拼音后有空格
}
return 0;
}