Project Euler第1题使用while循环计算倍数和结果与预期不符排查
问题根因
你的计算结果比正确值多1000,问题出在循环终止逻辑:
- 题目要求统计1000以内的自然数,即取值范围为小于1000的数,不包含1000本身。
- 现有代码中,当
n=1000时,会先进入循环体判断:1000是5的倍数,会被累加到sum中,之后n自增为1001才会触发终止条件退出循环,多计入的1000就是结果偏差的来源。
修复方案
方案1:调整终止判断阈值
将终止条件中的n > 1000修改为n >= 1000即可,修改后对应代码片段:
n = n + 1; if(n >= 1000) { notFinished = false; }
方案2:简化循环逻辑(更易读)
直接去掉冗余的notFinished变量,将while循环条件直接修改为数值范围判断,代码逻辑更清晰:
package net.projecteuler; public class Problem01 { public static void main(String[] args) { int n = 0; int sum = 0; while(n < 1000) { if(n % 3 == 0 || n % 5 == 0) { sum += n; } n++; } System.out.print("符合条件的数的总和是 " + sum); } }
内容的提问来源于stack exchange,提问作者fabinfabinfabin
相关产品推荐
相关产品推荐

