[c]代码库
# include <stdio.h>
# include <malloc.h>
# define MAXN 1000
/*问题描述:编写程序,对给定的n(n≦100),计算并输出k的阶乘k!(k=1,2,…,n)的全部有效数字。*/
void pnext ( int a[ ],int k ) //已知a中的(k-1)!,求出k!在a中。
{
int *b,m=a[0],i,j,r,carry;
b= ( int * ) malloc ( sizeof ( int ) * ( m+1 ) );
for ( i=1; i<=m; i++ ) b[i]=a[i];
for ( j=1; j<k; j++ ) //控制累加k-1次
{
for ( carry=0,i=1; i<=m; i++ ) //i存放的是整数的位数
{
r= ( i<a[0]?a[i]+b[i]:a[i] ) +carry;//进位标志
a[i]=r%10;
carry=r/10;
}
if ( carry ) a[++m]=carry;
}
free ( b );
a[0]=m;
}
void write ( int *a,int k ) //功能是输出累加K次后的数组的各个位
{
int i;
printf ( “%4d!=”,k );
for ( i=a[0]; i>0; i-- )
printf ( “%d”,a[i] );
printf ( “\n\n” );
}
void main()
{
int a[MAXN],n,k;
printf ( “Enter the number n: “ );
scanf ( “%d”,&n );
a[0]=1;
a[1]=1;
write ( a,1 );
for ( k=2; k<=n; k++ )
{
pnext ( a,k );
write ( a,k );//输出长整数的各位
getchar();
}
}