毕左二少 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!

  • 写回答

3条回答 默认 最新

  • 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

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

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 表达式必须是可修改的左值
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题