毕左二少 2023-01-07 19:17 采纳率: 100%
浏览 43
已结题

【C++】代码为何出错?

题目

题目背景:

现在有一个整数A( 0 < A ≤ 1000000000)

输入格式

一行一个正整数A。

输出格式

一行一个正整数。

样例

样例输入1

125

样例输出1

3

样例输入2

305160

样例输出2

2

数据范围与提示

时间限制:1s1s

空间限制:512MB

代码

#include<bits/stdc++.h>
using namespace std;
int ws(int i){
    long long x;
    for(x=0;i>0;x++){
        i/=10;
    }
    return x;
}
int main(){
    int a,ans=0;
    cin>>a;
    if(a%10==5){
        for(int z=1;z<=a;z++){
            if(a%5==0){
                a/=5;
            }else{
                cout<<z;
                return 0;
            }
        }
    }else{
        for(int z=1;z<=ws(a);z++){
            int m=pow(10,z);
            if(a%m/pow(10,z-2)==0){
                ans++;
            }
        }
        cout<<ans;
        return 0;
    }
    return 0;
}

问题:第二种情况0数量统计不准确。

如:输入305160时,输出1。(×)

输入1000时,输出3。(√)

输入10001时,输出0。(×)

我:我是写代码的,还能输给你生0蛋子?

电脑:你这0包熟吗?

请帮忙看看谢谢!

orz!

  • 写回答

2条回答 默认 最新

  • a5156520 2023-01-07 19:42
    关注

    可能是对于0的数量的统计的判断过于复杂了,可以每次进行a对10求余求出个位数是否为0,逐个数位进行判断即可,修改如下:

    #include<bits/stdc++.h>
    using namespace std;
    int ws(int i){
        long long x;
        for(x=0;i>0;x++){
            i/=10;
        }
        return x;
    }
    int main(){
        int a,ans=0;
        cin>>a;
        if(a%10==5){
            for(int z=1;z<=a;z++){
                if(a%5==0){
                    a/=5;
                }else{
                    cout<<z;
                    return 0;
                }
            }
        }else{
            
    //        for(int z=1;z<=ws(a);z++){
    //            int m=pow(10,z);
    //            if(a%m/pow(10,z-1)==0){
    //                
    //                ans++;
    //                printf("ws(a)=%d,pow(10,z-1)=%d,m=%d,a%%m/pow(10,z-1)=%d,ans=%d\n",ws(a),pow(10,z-1),m,a%m/pow(10,z-1),ans);
    //            }
    //        }
    
                if(a==0){
                    ans=1;
                }else{
                    int single = a%10;
                    while(a!=0){
                        if(single==0){
                            ans++;
                        }
                        a=a/10;
                        single = a%10;
                    }
                }
                
                
            cout<<ans;
            return 0;
        }
        return 0;
    }
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月7日
  • 已采纳回答 1月7日
  • 创建了问题 1月7日

悬赏问题

  • ¥30 求给定范围的全体素数p的(p-2)的连乘积
  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页