m0_64123291 2022-05-30 10:51 采纳率: 60%
浏览 57
已结题

C语言——PAT 乙级(1002.读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。)

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图

PTA平台显示我部分正确

运行结果及报错内容
我的解答思路和尝试过的方法
#include<iostream>
#include<math.h>
using namespace std; 
int main()
{
    cout<<"请输入一个正整数"<<endl;
    int n=0;
    do
    {
        cin>>n;
        if(n>pow(10,100))cout<<"输入的数不小于十的一百次方,请重新输入"<<endl;
    }
    while(n>pow(10,100));
    int sum=0;
    for(n;n!=0;n/=10)
    {
        int y;
        y=n%10;
        sum+=y;
    }
    while(sum!=0)
    {
        int x;
        x=sum%10;
        switch(x)
        {
            case 1: cout<<"yi";
                break;
            case 2: cout<<"er";
                break;
            case 3: cout<<"san";
                break;
            case 4: cout<<"si";
                break;
            case 5: cout<<"wu";
                break;
            case 6: cout<<"liu";
                break;
            case 7: cout<<"qi";
                break;
            case 8: cout<<"ba";
                break;
            case 9: cout<<"jiu";
                break;
            case 0: cout<<"ling";
                break;
        }
        sum/=10;
        if(sum!=0)cout<<" ";
    }
    return 0;
}
我想要达到的结果
  • 写回答

1条回答 默认 最新

  • 浪客 2022-05-30 11:52
    关注
    
    #include<iostream>
    #include<math.h>
    #include<string>
    
    using namespace std;
    int main()
    {
        string han[]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
        
        cout<<"请输入一个正整数"<<endl;
        long n=0;//int n=0;
        do
        {
            cin >> n;
            if(n>pow(10,100))cout<<"输入的数不小于十的一百次方,请重新输入"<<endl;
        }
        while(n>pow(10,100));
    
        int sum=0,s[100],len=0;
    
        for(; n!=0; n/=10)
        {
            //int y;
            //y=n%10;
            sum+=n%10;//y;
        }
    
        //处理sum为0的情况    
        if(sum==0)
        {
            len=1;
            s[0]=0;
        }
    
        while(sum!=0)
        {
            int x;
            x=sum%10; //从个位开始取数字,输出需要把结果反过来。
        
            s[len++]=x;
            sum/=10;
            //if(sum!=0)cout<<" "; 
            
        }
    
        for(len--;len>=0;--len) //逆序输出
        {
            cout << han[s[len]];
            if(len!=0)cout<<" ";
        }
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月7日
  • 已采纳回答 5月30日
  • 创建了问题 5月30日

悬赏问题

  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line