class Program
{
    static void Main(string[] args)
    {
        int temp;
        int arm, j = 0;
        List<int> armstrongnos = new List<int>();
        for (int i = 1; i < 1000; i++)
        {
            arm= 0;
            temp = i;
            while (i > 0)
            {
                arm += (i % 10) * (i % 10) * (i % 10);
                i /= 10;
            }
            if (arm== temp)
            {
                armstrongnos.Add(temp);// OutOfMemory Exception occurs whether you use array or list.
            }
        }
        foreach (var item in armstrongnos)
        {
            Console.WriteLine(item);
        }
        Console.ReadLine();
    }
}


我正在尝试将armstrong号s b / w 1打印到1000。在上面的代码中,确认它是armstrong号。我将这些值分配给数组或列表。但是在两种情况下我都遇到了outofMemory异常。
无法理解为什么会出现此问题。
请帮助解决问题。
我在此守则中做错了什么。请解释。

最佳答案

您正在运行一个无限循环。循环的停止条件为i < 1000
但是i始终小于1000,因为您正在循环和while (i > 0)中对其进行递减,但是i始终大于0。无限运行,您的代码最终会遇到OutOfMemory异常。

如果要使用变量值,请不要使用循环的i迭代器进行操作-使用temp进行操作。

for (int i = 1; i < 1000; i++)
{
    arm = 0;
    temp = i;

    while(temp > 0)
    {
       arm += (temp % 10) * (temp % 10) * (temp % 10);
       temp /= 10;
    }
    if (arm == i)
       armstrongnos.Add(i);
}
foreach (var item in armstrongnos)
    Console.WriteLine(item);

Console.ReadLine();

10-04 12:16