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();