当前位置: 代码迷 >> C语言 >> [求助]谁给我纠正一下我的程序????快呀!!谢谢!!
  详细解决方案

[求助]谁给我纠正一下我的程序????快呀!!谢谢!!

热度:108   发布时间:2007-08-19 20:23:48.0
[求助]谁给我纠正一下我的程序????快呀!!谢谢!!
求解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的范围了吗?

对,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 ...
我知道了,谢谢
----------------解决方案--------------------------------------------------------

我先试一下,先谢谢各位了!!!


----------------解决方案--------------------------------------------------------
我试过之后正确了,谢谢大家了!!!!
----------------解决方案--------------------------------------------------------
  相关解决方案