#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;
}
void main()
{
clrscr();
int a[N];
int n;
cout << "Enter the number n:";
cin >> n;
if(n<0)
{
cout << "Error!" << endl;
return;
}
for(int k=0; k<=n; k++)
{
next(a,k);
}
write(a,n);
}
使用数组存放各个数字
使用递推法计算
例如:知道5!,6!=6个5!相加
[ 本帖最后由 wutugu 于 2007-1-22 21:13 编辑 ] |