输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10
的100次方
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
我的代码是
#include
#include
#include
using namespace std;
int main()
{
int sum=0,len,i;
string str;
cin>>str;
len=str.length();
for(i=0;i
{sum=sum+str[i]-'0';};
string a[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int x,y,z;//x为个位,y为十位,z为百位。
if(sum>99)
{
z=sum/100;
y=(sum/10)%10;
x=sum%10;
cout<<a[z]<<' '<<a[y]<<' '<<a[x]<<endl;
}
if(sum<100)
{
y=(sum/10)%10;
x=sum%10;
cout<<a[y]<<' '<<a[x]<<endl;
}
return 0;
}
第二节点过不去是怎么回事
pat乙级1002读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- CaptainXue 2019-05-09 15:39关注
你这个逻辑有问题吧!你对sum的分类为,sum>99和sum小于100是不对的,根据题目要求n小于10的100次方,所以各位数字之和最大不会超过909;
所以,如果你采用分类讨论,应该分0到9,10到99,100到999三种情况;int x,y,z;//x为个位,y为十位,z为百位。 if(sum>=0&&sum<=9)//sum只有一位数字 cout<<a[sum]<<endl; if(sum>=10&&sum<=99) {//sum有两位数字 y=(sum/10)%10; x=sum%10; cout<<a[y]<<' '<<a[x]<<endl; } if(sum>=100&&sum<=999) {//sum有三位数字 z=sum/100; y=(sum/10)%10; x=sum%10; cout<<a[z]<<' '<<a[y]<<' '<<a[x]<<endl; }
其实还有一种更简单的方法,一个while循环就搞定了, 截取数字上各位数字,但是这种方法不能处理数字0的特殊情况,所以需要单独对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--) //注意这里要倒序输出,因为whike循环是从数字的低位开始截取的 cout<<a[b[j]]<<" "; cout<<a[b[0]];//为了防止最后一个拼音后有空格 }
解决 无用评论 打赏 举报