代码逻辑数学问题排查:输入100时平方差计算结果异常
平方差计算逻辑错误分析与修正
你的代码存在三个关键问题,导致计算结果不符合预期:
- 循环边界错误:两个计算方法中的循环条件都是
i < input,这会遗漏最后一个目标数(比如输入100时,只计算到99)。正确的边界应该是i <= input,确保包含输入值本身。 - 循环变量被非法修改:在
computeSumOfSquaresTo方法里,你直接把循环计数器i赋值为自身的平方,这会导致循环步长混乱,跳过大量本该计算的数字。比如i=2时被改成4,下一次循环i变成5,直接跳过了3的平方计算。 - 浮点数精度丢失:使用
Math.pow计算平方后强制转int,当数值较大时可能因为double类型的精度限制丢失数据。用整数直接相乘(比如sumOfNatural * sumOfNatural)更可靠,完全避免精度问题。
修正后的代码如下:
class DifferenceOfSquaresCalculator { int computeSquareOfSumTo(int input) { int sumOfNatural = 0; for (int i = 1; i <= input; i++) { sumOfNatural += i; } return sumOfNatural * sumOfNatural; } int computeSumOfSquaresTo(int input) { int sumOfSquaredNaturals = 0; for (int i = 1; i <= input; i++) { sumOfSquaredNaturals += i * i; } return sumOfSquaredNaturals; } int computeDifferenceOfSquares(int input) { return computeSquareOfSumTo(input) - computeSumOfSquaresTo(input); } }
测试输入100时,修正后的代码会得到正确结果25164150。
内容的提问来源于stack exchange,提问作者Serdyna
相关产品推荐
相关产品推荐

