首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求2!+4!+6!+8!+10!+…+ n!偶数阶乘有关问题

2012-02-21 
求2!+4!+6!+8!+10!+…+ n!偶数阶乘问题#includestdio.hvoidmain(){inti,ndoublet,st1s0printf( 请

求2!+4!+6!+8!+10!+…+ n!偶数阶乘问题
#include   <stdio.h>
void   main()
{
    int   i,n;
    double   t,s;
    t=1;  
    s=0;
    printf( "请输入一个n值: ");
    scanf( "%d ",&n);
    printf( "\n ");
    for   (i=2;i <=n;i=i+2)
    {
        t=t*i*(i-1);       //求偶数阶乘2!,4!,...n!
        s=s+t;                   //求阶乘和
    }
    printf( "2!+4!+...+n!=%f ",s);
}

为什么我输入171以内的数都没有问题呢?但是172就显示
1.#INF001
为什么上面程序可以算到171这么大呢?
我试过其他的一些写法   很多都到100就出现问题了?
是因为   double   t,s的问题吗?
大数阶乘要用到动态链表?
帮我分析一下上面的吧。。。



[解决办法]
正像你说的,大数只能用数组或链表存了。
[解决办法]
VC下以%e格式输出的运行结果
--------------------------
请输入一个n值:170

2!+4!+...+n!=7.257668e+306

--------------------------

double类型表示的浮点数范围在10的308次方左右.....比170再大一些的话肯定溢出了...

当然double类型的数据范围各编译系统下可能不同,但是确定是数据溢出问题.....

热点排行