如果n很大怎么办呢?比如n=1000
----------------解决方案--------------------------------------------------------
如果N=1000,现实吗??
用科学计数法,浮点
----------------解决方案--------------------------------------------------------
为什么不现实?难道不能够编出来吗?
----------------解决方案--------------------------------------------------------
那就只能用高精度了吧
----------------解决方案--------------------------------------------------------
自己编了一个,可以精确的求出1!+2!+...+1000!的值,...其实可以求出任意大数的值的...可惜数组长度有限呀
#include"math.h"
#include"conio.h"
#define N1 10000
int sum[N1],sv[N1];
main()
{int i,j,n;
clrscr();
printf("Please Input n=");
scanf("%d",&n);
for(i=0;i<N1;i++)
{sum[i]=0;sv[i]=0;}
sv[0]=1;
for(i=1;i<=n;i++)
nj(i);
printf("\n1!");
for(j=2;j<=n;j++)
printf("+%d!",j);
printf("=");
for(i=N1-1;i>=0;i--)
if(sum[i]>0) break;
for(j=i;j>=0;j--)
printf("%d",sum[j]);
getch();
}
nj(int n)
{int wz,yxw,i,j,k,dd;
int a[N1];
for(i=0;i<N1;i++)
a[i]=sv[i];
for(j=N1-1;j>=0;j--)
if(a[j]>0) {yxw=j;break;}
dd=0;
for(k=0;k<=yxw;k++)
{wz=a[k]*n+dd;
a[k]=wz%10;
dd=wz/10;
}
while(dd>0)
{a[k++]=dd%10;
dd=dd/10;
}
dd=0;
for(i=0;i<k;i++)
{wz=a[i]+sum[i]+dd;
sum[i]=wz%10;
dd=dd/10;
}
while(dd>0)
{wz=sum[i]+dd;
sum[i]=wz%10;
dd=wz/10;
i++;
}
for(i=0;i<N1;i++)
sv[i]=a[i];
}
----------------解决方案--------------------------------------------------------
简单写了个:
#include "stdio.h"
int main(void)
{
int i,n,sum=0;
int rfact(int i);
printf("Input n=");
scanf("%d",&n);
for(i=1;i<=n;i++)
sum=sum+rfact(i);
printf("%d\n",sum);
return 0;
}
int rfact(int k)
{
if(k==0||k==1)return(1);
else return (k*rfact(k-1));
}
----------------解决方案--------------------------------------------------------
如此简单的问题还是希望楼主好好看书去吧
----------------解决方案--------------------------------------------------------