C#新手求助:幂次累加求和循环的错误排查与修正
你的C#循环代码问题分析与修正
嘿,刚学循环就动手实践超棒!咱们来一步步拆解你代码里的问题,然后把它改对~
你代码里的几个核心错误
- 内层循环范围错误:你要计算的是第
i步(比如i=1时是1^1,i=2时是1²+2²),所以内层循环应该遍历p从1到i,而不是i+1。你的代码里p <= i+1会多算一个额外的项,完全偏离了需求。 - 幂运算结果未正确累加:你写了
Math.Pow(p, (i + 1))但根本没把这个值加到sum里,反而加的是p本身(sum = sum + p),这完全不是你要的“各数的i次方之和”。另外指数也错了,应该是i而不是i+1,因为第i步是每个数的i次方相加。 - 数据类型适配问题:
Math.Pow返回的是double类型,用int sum存储不仅会丢失精度(尤其是当i到75时,数值会极大),还可能触发类型不匹配的警告/错误,所以sum应该用double或者更适合超大数的BigInteger。
修正后的基础版本代码
这个版本用double处理,适合快速验证需求:
for (int i = 1; i <= 75; i++) { double sum = 0; // 内层循环遍历1到i,对应第i步的所有项 for (int p = 1; p <= i; p++) { // 计算p的i次方,累加到sum中 sum += Math.Pow(p, i); } Console.WriteLine($"第{i}步的结果:{sum}"); }
更精确的超大数处理版本(可选)
当i增大到一定程度时,double会丢失精度,如果你需要完全精确的整数结果,可以用BigInteger(需要引用System.Numerics命名空间),自己实现整数幂运算:
using System.Numerics; class Program { static void Main() { for (int i = 1; i <= 75; i++) { BigInteger sum = 0; for (int p = 1; p <= i; p++) { sum += IntegerPower(p, i); } Console.WriteLine($"第{i}步的结果:{sum}"); } } // 自定义整数幂运算方法,避免浮点数精度损失 private static BigInteger IntegerPower(BigInteger num, int power) { BigInteger result = 1; for (int j = 0; j < power; j++) { result *= num; } return result; } }
内容的提问来源于stack exchange,提问作者simonkerike
相关产品推荐
相关产品推荐

