传递参数时候出现的错误?

ncudsp 2010-11-23 08:30:14
project euler第十四题
求解100万内最长链。



#include "stdafx.h"

int chain_length(int num);

int _tmain(int argc, _TCHAR* argv[])
{
int i;
int temp = 0;
int mark;
int llength = 0;
for (i = 1 ; i < 1000000 ;i++)
{
temp = chain_length(i);
if (temp > llength)
{
llength = temp;
mark = i;
}

}
return 0;
}


int chain_length(int anum)
{
int i = 0;
int num = anum;
while (1)
{
i ++;
if(num == 1)
{

break;
}
else if(num % 2 == 0)
{

num = num / 2;
}
else
{
num = num * 3 + 1;
}
}
return i;
}

当main函数执行到计算113383这值 的时候函数里头的num值(由anum传来)就会自动变成负数,然后进入死循环,为什么?
编译环境是vs2005,win32 console application,请教问题在什么地方
...全文
82 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ncudsp 2010-11-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 csuxiaowu 的回复:]
引用 3 楼 ncudsp 的回复:

引用 1 楼 csuxiaowu 的回复:
int 啊

不要就说一个int啊,什么意思呢


我错了
---------
当 为 113383 的时候
num 一直不等于 1
因为 它执行
num = num * 3 + 1;
这里 会变得很大
[/Quote]


好像是,我试试
Csuxiaowu 2010-11-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ncudsp 的回复:]

引用 1 楼 csuxiaowu 的回复:
int 啊

不要就说一个int啊,什么意思呢
[/Quote]

我错了
---------
当 为 113383 的时候
num 一直不等于 1
因为 它执行
num = num * 3 + 1;
这里 会变得很大
liutengfeigo 2010-11-23
  • 打赏
  • 举报
回复
int 4字节,没那么小吧。我记得是9位数的。
楼主你试试long long int.
ncudsp 2010-11-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 csuxiaowu 的回复:]
int 啊
[/Quote]
不要就说一个int啊,什么意思呢
ncudsp 2010-11-23
  • 打赏
  • 举报
回复
(i = 1 ; i < 1000000 ;i++)

这里如果int越界了,早应该跳出来了吧
Csuxiaowu 2010-11-23
  • 打赏
  • 举报
回复
int 啊

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧