[C] 递推法 →→→→→进入此内容的聊天室

来自 , 2019-10-18, 写在 C, 查看 143 次.
URL http://www.code666.cn/view/d5425997
  1. # include <stdio.h>
  2. # include <malloc.h>
  3. # define  MAXN   1000
  4.  
  5. /*问题描述:编写程序,对给定的n(n≦100),计算并输出k的阶乘k!(k=1,2,…,n)的全部有效数字。*/
  6. void  pnext ( int a[ ],int k ) //已知a中的(k-1)!,求出k!在a中。
  7. {
  8.         int *b,m=a[0],i,j,r,carry;
  9.         b= ( int * ) malloc ( sizeof ( int ) * ( m+1 ) );
  10.         for ( i=1; i<=m; i++ )        b[i]=a[i];
  11.         for ( j=1; j<k; j++ )  //控制累加k-1次
  12.         {
  13.                 for ( carry=0,i=1; i<=m; i++ ) //i存放的是整数的位数
  14.                 {
  15.                         r= ( i<a[0]?a[i]+b[i]:a[i] ) +carry;//进位标志
  16.                         a[i]=r%10;
  17.                         carry=r/10;
  18.                 }
  19.                 if ( carry )  a[++m]=carry;
  20.         }
  21.         free ( b );
  22.         a[0]=m;
  23. }
  24. void  write ( int *a,int k ) //功能是输出累加K次后的数组的各个位
  25. {
  26.         int i;
  27.         printf (%4d!=,k );
  28.         for ( i=a[0]; i>0; i-- )
  29.                 printf (%d”,a[i] );
  30.         printf ( “\n\n” );
  31. }
  32. void main()
  33. {
  34.         int a[MAXN],n,k;
  35. printf ( “Enter the number n:  “ );
  36.         scanf (%d”,&n );
  37.         a[0]=1;
  38.         a[1]=1;
  39.         write ( a,1 );
  40.         for ( k=2; k<=n; k++ )
  41.         {
  42.                 pnext ( a,k );
  43.                 write ( a,k );//输出长整数的各位
  44.                 getchar();
  45.         }
  46. }
  47.  

回复 "递推法"

这儿你可以回复上面这条便签

captcha