如何用C#实现输出1、1+1、1+1+1序列?代码报错求修复
问题修复方案
先整理你代码里的几个关键错误:
- 未赋值局部变量:声明
int i后直接用在Math.Pow(i - 1)里,此时i还未赋值,编译器报错;而且这个d变量后续未被使用,完全可以删除。 - Math.Pow参数缺失:
Math.Pow需要两个参数(底数和指数),比如计算10的i-1次方应该写Math.Pow(10, i-1),你只传了一个参数,导致报错。 - 运算符误用:C#里
^是按位异或运算符,不是幂运算,用它计算次方是错误的。 - 循环逻辑混乱:
for循环条件i >=1会导致无限循环;且你在循环内修改i的值,彻底打乱了循环的迭代逻辑。 - 公式错误:你写的公式无法生成1、11、111...的序列,其实有更简单的生成方式。
修复思路
生成1、11、111...这类序列,最直接的方式是递推:当前数 = 当前数 *10 +1,比如:
- 第1项:1
- 第2项:1*10+1=11
- 第3项:11*10+1=111
- ...以此类推
同时,不要修改循环变量i,用单独的变量保存当前要输出的数,循环设置明确的终止条件(比如输出5项就设i<=5)。
修复后的代码
using System; namespace PL1Week6Part1SumofSeries1_11_111_1111CSharp { internal class Program { static void Main(string[] args) { // 要输出的项数,可自行调整 int totalItems = 5; int currentNumber = 0; int sum = 0; for (int i = 1; i <= totalItems; i++) { // 递推生成当前项:1, 11, 111... currentNumber = currentNumber * 10 + 1; sum += currentNumber; // 处理最后一项的输出格式,避免末尾多余的"+" if (i == totalItems) { Console.Write(currentNumber); } else { Console.Write($"{currentNumber} + "); } } // 输出总和 Console.WriteLine($" = {sum}"); Console.ReadLine(); } } }
额外说明
如果坚持要用幂运算生成每一项,也可以这样写(注意Math.Pow返回double,需要转成int):
currentNumber = (int)(Math.Pow(10, i) - 1) / 9;
比如i=1时,(10^1-1)/9=9/9=1;i=2时,(100-1)/9=99/9=11,也能得到正确序列,但递推方式效率更高、逻辑更直观。
内容的提问来源于stack exchange,提问作者Hector Mellen
相关产品推荐
相关产品推荐

