编程计算1*2*3+4*5*6+....+99*100*101的值,为什么用tc3.0编写出来的结果是个负数?

程序如下:
#clude<sdio.h>
void main()
{
int n,i,j,sum;
sum=0;
for(n=1,i=2,j=3;n<=99;n=n+3,i=n+1,j=i+1)
sum=sum+i*j*n;
getch();
}

答案是8162550。
在tc3.0下,int是2个字节的,也就是说int的范围是-65536~65535。这样的话这个答案存在以int定义的变量中就会导致溢出,所以输出就是负的了。
tc3.0下可以用long int来表示4个字节的整型,能表示的数的范围是-2147483648~2147483647,这样就不会溢出了。

现代C/C++编译器基本上都是32位的了,int也由2个字节升到4个字节,所以如果你在vc或gcc上编译这段代码,结果就不会有任何问题。

不知道我说明白了没有,不明白还可以继续问。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-10-20
溢出
该用long int
第2个回答  2007-10-21
#clude<sdio.h>
void main()
{
int n,i,j,sum;
sum=0;
for(n=1,i=2,j=3;n<=99;n=n+3,i=n+1,j=i+1)
sum=sum+i*j*n;
getch();
}

不只是有INT的问题
for(n=1,i=2,j=3;n<=99;n=n+3,i=n+1,j=i+1)
这句最好改为
for(n=1,i=2,j=3;n<=99;n=n+3,i=i+3,j=j+3)
相似回答