-------------程序*酒*人生
只是从101!之和开始,就开始和Joforn的产生误差了.
[此贴子已经被作者于2007-6-28 22:28:23编辑过]
小弟瞎编了个,时间仓促,未加豆号分隔处理:
[此贴子已经被作者于2007-6-29 14:58:54编辑过]
数组模拟
#include <iostream.h>
#include <conio.h>
#include <malloc.h>
const int N = 1000;void next(int a[],int n)
{
if(n==1 || n==0)
{
a[0] = 1;
a[1] = 1;
return;
}
int k = a[0];
int *b = (int *)malloc(sizeof(int) * (k+1));
int temp = 0;
int c = 0;
for(int i=1;i<=k;i++)
{
b = a;
}
for(i=1;i<n;i++)
{
temp = 0;
c = 0;
for(int j=1;j<=k;j++)
{
temp = (j<=a[0]?a[j]+b[j]:a[j]) + c;
c = temp / 10;
a[j] = temp % 10;
}
if(c>0)
{
a[++k] = c;
}
}
free(b);
a[0] = k;
}void write(int *a, int k)
{
cout << k << \"! = \";
for(int i=a[0];i>0;i--)
{
cout << a;
}
cout << endl;
}int main()
{
//clrscr();
int a[N];
int n;
cout << \"Enter the number n:\";
cin >> n;
if(n<0)
{
cout << \"Error!\" << endl;
return -1;
}
for(int k=0; k<=n; k++)
{
next(a,k);
}
write(a,n);
return 0;
}
给大家提供个思路:在计算N!的阶乘时,Sn-1(前n-1项的和),已经计算出来了,且(N-1)!也计算出来了
那Sn=Sn-1+(N-1)!*N,这个公式可以一步完成,从而减少计算N!后,再去计算Sn-1+N!的时间,可以明显提高速度