请用C语言编程 1+2!+3!+4!+····+100! 的详细的过程

来源:百度知道 编辑:UC知道 时间:2024/06/02 22:26:25

#define N 100
main()
{
int i;
double m=1,sum=0;
for(i=1;i<N+1;i++)
{
m*=i;
sum+=m;
}
printf("1+2!+……+%d!=%f\n",N,sum);

}
算法很简单的,用m累乘i求n!,用sum累加m求和
但要注意数据类型,这是些很大的数
首先应该明白整型数据类型(无符号长整型 unsigned long整型中正数最大的了0~4294967295)是不够的会超出其最大值
要用双精度实型double (1/7E-308~1/7E+308)N还要小于170不然就超范围了
实型超出范围还会有错误提示值溢出,整型就不会,给出错值(如长整型给出负值,而无符号长整型则是小值超出范围后估计它就没计算了
)有这样的差别具体原因我也不清楚,以前困惑好久也没找出原因就淡忘了?
另外tc中……不能照样输出,不知道有何办法?

#include "stdio.h"

double n(double i) /*i!*/
{
double r=1;
double j=0;
for(j=1;j<=i;j++)
r*=j;
return r;
}

main()
{
double i=0,r=0;
for(i=1;i<=100;i++)
{
r+=n(i); /**/
}
printf("1+2!+3!+...+100!=%g",r);
}
答案:9.4269e+157

9426900168370992500000000000000000000000000000000000000000000000000000000000000000000000000000