[求助]谁给我纠正一下我的程序????快呀!!谢谢!!
求解20!#include "stdio.h"
main()
{
long int mul;
int n;
for(n=1,mul=1;n<=20;n++)
{
mul*=n;}
printf("\nmul=%ld",mul);
}
我就不懂为什么运行结果不对????
----------------解决方案--------------------------------------------------------
你考虑到long的范围了吗?
----------------解决方案--------------------------------------------------------
换double %f(gcc)或%lf(tc)输出
----------------解决方案--------------------------------------------------------
以下是引用coachard在2007-8-19 20:30:07的发言:
你考虑到long的范围了吗?
你考虑到long的范围了吗?
对,C中long最大取2的31次方减1. 20!早就超了。
但是我还有个问题:
用这个程序算出来
15的阶乘=2004310016,
16的阶乘=2004189184,
两者都和long的最大值很接近,可是它们应该是16倍的关系呀?
为什么
----------------解决方案--------------------------------------------------------
nul和n类型也不一样啊``
----------------解决方案--------------------------------------------------------
以下是引用nwpu063417在2007-8-19 20:58:02的发言:
对,C中long最大取2的31次方减1. 20!早就超了。
但是我还有个问题:
用这个程序算出来
15的阶乘=2004310016,
16的阶乘=2004189184,
两者都和long的最大值很接近,可是它们应该是16倍的关系呀?
为什么
这只能说明算到16!以前已经溢出了~~~好像在14!就溢出了
[此贴子已经被作者于2007-8-19 21:18:21编辑过]
----------------解决方案--------------------------------------------------------
回复:(coachard)以下是引用nwpu063417在2007-8-19 ...
我知道了,谢谢 ----------------解决方案--------------------------------------------------------
我先试一下,先谢谢各位了!!!
----------------解决方案--------------------------------------------------------
我试过之后正确了,谢谢大家了!!!!
----------------解决方案--------------------------------------------------------