给定数n求其前所有正偶数之和的C++代码问题排查
问题根因
你的代码无法正常运行是因为出现了死循环:
for循环遍历到第一个偶数时,会进入内层while循环while循环内部没有任何修改counter变量的逻辑,counter%2==0的判断条件永远成立- 程序会卡在这个位置无限重复累加当前的偶数值,无法继续执行后续逻辑
你原本的逻辑完全不需要嵌套两层循环,只需要在遍历到偶数时做一次累加即可。
修复代码(保留原循环思路)
把内层的while替换成单次判断的if即可:
#include<iostream> using namespace std; int main() { int n; cin >> n; int sum = 0; for(int counter = 1; counter <= n; counter++) { if(counter % 2 == 0) { sum = sum + counter; } } cout << sum << endl; return 0; }
更高效的实现方式
n以内的正偶数本身是公差为2的等差数列,直接用数学公式计算可以把时间复杂度降到O(1),不需要遍历:
等差数列和 = 项数 × (首项 + 末项) / 2,代入偶数的规律可以简化为sum = (n/2) * (n/2 + 1),代码实现如下:
#include<iostream> using namespace std; int main() { int n; cin >> n; int even_count = n / 2; int sum = even_count * (even_count + 1); cout << sum << endl; return 0; }
内容的提问来源于stack exchange,提问作者charliebradbury
相关产品推荐
相关产品推荐

