qq_29462457 2019-05-08 23:39 采纳率: 0%
浏览 1191

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

输入格式:
每个测试输入包含 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;
}
第二节点过不去是怎么回事

  • 写回答

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]];//为了防止最后一个拼音后有空格
        }
    
    评论

报告相同问题?

悬赏问题

  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services