我的程序到底哪儿错了

找出1-N中能被5整除且至少有一位数字是5的所有整数的个数(N<32767)
输入
输入只有一行,只有1个整数N。
输出
输出只有一行(这意味着末尾有一个回车符号),包括1个整数。


#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n,m=0,x,a;
    cin>>n;
    for(int i=5;i<=n;i+=5){
        x=i;
        while(x){
        a=x%10;
        x=x/10;    
        if(a==5)m++;
        break;
        }
    }
    cout<<m;
    return 0;
}
}

{}有问题。if应该包括m++和break;最后多了一个}

【以下回答由 GPT 生成】

问题优化: 根据代码示例,问题中的代码看起来是正确的。但是可以对代码进行一些优化。

优化方案: 1. 首先,将头文件 <bits/stdc++.h> 替换为适当的头文件,例如 <iostream><cmath>。 2. 将 using namespace std; 改为在需要使用的地方逐个引入命名空间,避免全局引入。 3. 添加输入的校验,判断输入的 N 是否小于 32767,如果不是则显示错误信息并终止程序。 4. 使用更具有可读性的变量名,例如 count 替代 m。 5. 不需要使用 a 来存储当前数字的个位数值,可以在循环中直接对 x 取余来判断个位数是否是 5。 6. 将 x 的更新操作(x = x / 10;)放到循环的最后。

优化后的代码示例:

#include <iostream>
#include <cmath>

int main()
{
    int n;
    int count = 0;

    std::cin >> n;

    if (n >= 32767) {
        std::cout << "Invalid input: N should be less than 32767";
        return 0;
    }

    for (int i = 5; i <= n; i += 5) {
        int x = i;

        while (x) {
            if (x % 10 == 5) {
                count++;
                break;
            }

            x /= 10;
        }
    }

    std::cout << count;

    return 0;
}

这样优化后的代码更加清晰易懂,并且效率不会有太大影响。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^