我正在尝试解决项目euler上的问题14,而我最初的蛮力尝试让我感到难过。出于某种原因,代码遇到了一个介于13和19之间的循环。我不认为我可以正确地进行非暴力方法,除非我能首先得到蛮力方法至少正确计算。 我的代码如下所示:
unsigned int loop(unsigned int n)
{
unsigned int count = 0;
while(1)
{
while(is_even(n))
{
n /= 2;
}
if(n > 1)
n = (n * 3) + 1;
else
break;
count++;
printf("%d,", n);
}
printf("%d\n", n);
return count;
}
is_even(n)计算为“n& 0x01”。
有谁能告诉我为什么输出是连续的(理论上无穷无尽的)“13,19”流重复?
答案 0 :(得分:3)
n & 0x01
奇数,则 1
将为n
,如果甚至,则为is_even
。更改!(n & 0x01)
以返回{{1}}。