【发布时间】:2017-12-03 07:34:20
【问题描述】:
我最近发现了 3n+1 问题,想写一个简单的代码来解决这个问题。
这一切都有效,但在 999,999,999 这样的高奇数时,它会变为负数并重复无休止的循环,我不知道为什么。
// if n is odd n = 3n+1
// if n is even n = n/2
while (true)
{
int n;
Console.WriteLine("Enter a positive whole number greater than one: ");
while (!Int32.TryParse(Console.ReadLine(), out n))
{
Console.WriteLine("Enter a positive whole number greater than one: ");
}
while (n != 1)
{
if (n % 2 == 0)
{
n /= 2;
Console.WriteLine("n / 2 = " + n);
}
else
{
n = 3 * n + 1;
Console.WriteLine("3 * n + 1 = " + n);
}
}
Console.ReadLine();
Console.Clear();
}
我做错了什么?谢谢!
【问题讨论】:
-
听起来你遇到了integer overflow
-
collatz conjeture 已检查所有小于 87×2^60 的数字(通过 yoyo@home 项目) - 您需要大于 66 bits 的整数才能竞争。 int32 和 int64 太小了。使用decimal (10^28 ~> 2^93) 或BigInteger。编辑:忽略运行时间。