You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#平方差练习代码结果错误是否由类型转换问题导致?

问题原因

你遇到的核心问题是C#的整数除法截断规则:当/运算符两侧的操作数都为int类型时,会执行整数除法,直接舍弃小数部分只保留整数位。因此你代码中的1/4计算结果为0,1/6计算结果也为0,自然无法得到正确返回值。
另外你代码中使用Math.Pow做整数平方计算是不必要的,Math.Pow返回double类型,强转int反而可能引入精度误差,直接用整数乘法更稳妥。

虽然方法要求返回int类型,但运算过程中可以调整计算顺序,利用公式结果必然为整数的特性,将除法放在所有乘法之后执行,完全可以避开浮点运算的问题:

  • 和的平方公式可以改写为(max * (max + 1) / 2) * (max * (max + 1) / 2),因为max和max+1必有一个偶数,max*(max+1)可以被2整除,不会出现小数
  • 平方和公式可以改写为max * (max + 1) * (2 * max + 1) / 6,三者的乘积必然可以被6整除,最后做除法也不会出现小数

修正后代码

public static class DifferenceOfSquares
{
    public static int CalculateSquareOfSum(int max)
    {
        int sum = max * (max + 1) / 2;
        return sum * sum;
    }

    public static int CalculateSumOfSquares(int max)
    {
        return max * (max + 1) * (2 * max + 1) / 6;
    }

    public static int CalculateDifferenceOfSquares(int max)
    {
        return CalculateSquareOfSum(max) - CalculateSumOfSquares(max);
    }
}

如果你坚持要用原来的公式写法,也可以把分数的分子改为浮点型触发浮点除法:比如把1/4改为1.0/4,1/6改为1.0/6,最后再转int即可,但这种方式不如调整运算顺序的方案性能高,也存在极小概率的浮点精度误差。

内容的提问来源于stack exchange,提问作者ClearlyQ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:18:02