第1个回答 2009-08-19
首先,不建议用TC,在Windows下用VC6或者免费的软件C-free吧
其次,最好事先估计一下使用变量的值,像这样明显会溢出的
给你补充一点小贴士吧:
*****************************************************************
在C语言当中,比如2(十进制)转换成二进制就是10
如果是整形,2个字节,8位
在内存中就是:00000010(就是十进制的2)
它的反码是:11111101(看数字,体会反码的意思)
然后补码就是:11111110(就是在反码的情况下+1,你看看对不对呢?)
所以,int型的-2就是11111110了
*****************************************************************
你所说的负数,就是溢出的关系,就像汽车里程表一样,比如它的极限值是200公里,当你行驶超过200公里,它就又从0公里开始了,所以当你的变量sum超过了所求的值,它就变成负数了
再者,你在输出sum的时候用的是“%d”而不是“%ld”,“%ld”表示长整型,“%d”只表示整型。为了防止这个问题发生,最好将变量定义成long long型,在输出时使用“%ld”,而且使用新一点的编译器比较好,毕竟TC给整型只分配2个字节,VC分配4个字节,而且新的编译器支持long long型,TC我不太清楚支不支持,可能不支持吧
第2个回答 2009-08-30
好象是改了也白搭,在Turbo 2.0环境下整型和长整型都是2字节(最大值是32767,再大时"输出结果就不对了"至少俺家的机子是这样,就这一点曾经困扰了我好长时间才发现,呵呵,和课本上讲的不一样啊)建议改成长整型后在VC++6.0下调试,8!=40320本回答被提问者采纳
第3个回答 2009-08-20
因为阶乘是个增长很快的运算,很快就会超出C语言的整型数范围.你应该用浮点数来保存结果,但这样的话就看不到精确的数字了.
如果你真的想看到很大的n的阶乘的精确结果,那你只有用字符串来模拟整数运算了.
第4个回答 2009-08-19
输出超出范围!
你是用什么软件写的啊?Tubor C/C++吗,
在Tubor环境中 int只占两个字节 ,-32768~32767
用%d输出也是 -32768~32767范围!
你定义的sum是;long型的,四个字节!应该用把printf("The sum is %d\n",sum);中 %d改为%ld 输出范围大些
当 8!= 40320 就已经大于32767!
在VC6.0++中 int 占了四字节 跟long一样!
第5个回答 2009-08-19
我来晚了...
n=8时sum超过了int的范围
把int换成long long型 (中间有空格)
即:
long long sum;
long long型输出:
printf("%lld",sum);
如果TC不支持long long型数据,就换个编译器.
参考资料:手打的..