# 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 (); |
} |
} |