找出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;
}
这样优化后的代码更加清晰易懂,并且效率不会有太大影响。
【相关推荐】