for循环执行到中间就停住了
#include<stdio.h>int nchain(int);
int main ()
{
int a,b,n,i,r;
b=1;
printf("Waiting:\n");
for(i=1;i<1000000;i++)
{
r=i;
a=nchain(r);
printf("%d----%d\n",i,a);
if((a>=b))
{
b=a;
n=r;
}
}
printf("done!\n");
printf("%d---%d",n,b);
return 0;
}
int nchain(int x)
{
int s;
s=1;
while(x!=1)
{
if(x%2==0)
x=x/2;
else
x=3*x+1;
s=s+1;
}
return s;
} int型不管在 32位还是64位编译器都是4个字节; 默认int是有符号的 范围是 -2^16 ~2^16(即-65536~65536 );你这里是超出了int的范围。
你把int型改成无符号的就可以了(即 unsigned int); 有int 的地方都改成 unsigned int即可 直接上代码了
#include<stdio.h>
unsigned int nchain(unsigned int);
int main()
{
unsigned int a, b, n, i, r;
b = 1;
printf("Waiting:\n");
for (i = 1; i<1000000; i++)
{
r = i;
a = nchain(r);
printf("%d----%d\n", i, a);
if ((a >= b))
{
b = a;
n = r;
}
}
printf("done!\n");
printf("%d---%d", n, b);
return 0;
}
unsigned int nchain(unsigned int x)
{
unsigned int s;
s = 1;
while (x != 1)
{
if (x % 2 == 0)
x = x / 2;
else
x = 3 * x + 1;
s = s + 1;
}
return s;
} 18813974736 发表于 2016-8-28 14:18
int型不管在 32位还是64位编译器都是4个字节; 默认int是有符号的 范围是 -2^16 ~2^16(即-65536~65536 ); ...
谢谢,明白了 18813974736 发表于 2016-8-28 14:20
直接上代码了
#include
谢谢明白了 看看
页:
[1]