求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类型的数据范围各编译系统下可能不同,但是确定是数据溢出问题.....