回 帖 发 新 帖 刷新版面

主题:一个想了3天3夜没想出来的问题

[em10]这个问题就是怎么编程算出1到100的阶乘?那为老师能告诉我该怎么实现么?[em18]

回复列表 (共27个回复)

21 楼

就用小学生的方法去做,此时你只需要用一维数组去"摸拟"即可!
我简单讲一下:

[code]
算法如下:

 void compute ( int n )
 {
       int i,j,k,index = 0 ;//index 用来进位,以及计算结果的最终位数
       int a[MAX]={0} ;
        a[0] = 1 ; //初始值
       for( i = 1 ; i<= n ; i++ )
       { 
           for(j= 0 ; j<= index ; j++)
           a[j] *= i ; // 模拟笔算(小学生的方法)
           for(k = 0 ; k<= index ; k ++ )
           if ( a[k] >= 10 ) // 进位处理
           {
                 if ( a[index] >= 10 ) // 增加位数
                    ++ index ;
                 a[k+1] = a[k] / 10 ; // 懑10进1
                 a[k] %= 10 ;
           }
       }

         for(k=index ; i>= 0 ; k-- )
         printf("%d",a[k] ) ;//output the result 
}
             //算了吧!主函数我也写一下
         
             int main(void)
             {
                     int n ,t; 
                     scanf("%d",&n ) ;
                     #if compute (100)
                      compute ( n ) ;
                     // 如果是要计算1-100
                     //就改为: for ( t= 1 ; t<= 100 ; t ++ ) compute(t ) ;
                    #else
                        for(t=1 ; t<= 100 ; t++) 
                        compute(t) ;
                     #endif
                      return 0 ;
              }
[/code]
           

22 楼


今天没有事情,我想想,吧,

23 楼

/*求100阶乘*/
/*用数组的方法,用一个位乘结果,所以最大为100*9=900》256,所以,得用INT型 */
/*   25648*125=8*125+4*125*10+6*125*100+5*125*1000+2*125*10000   */
#include <stdio.h>
#define size  300
#define N  100
void main()
{

  int i;
  int j;    /*结果下标*/
  int n;
  int s[size];   /*存储结果*/
  int tail;  /*用于存储进位*/
  int temp;  /*用于数位相乘时临时值*/
/*初始化*/
  printf("\n please enter a nuber :");
  scanf("%d",&n);
  printf("\n%d \n",n);
  for(j=0;j<size;j++)
  {
    s[j]=0;
  }
  s[0]=1;

/*主体*/
  for(i=1;i<=n;i++)
  {
      tail=0;
      for(j=0;j<size;j++)    /*此括号中为每一位(100以内)与结果的一位(9以内)相乘*/
      {
          temp=s[j]*i+tail;   /*一位相乘结果*/
          s[j]=temp%10;       /*余数*/
      tail=temp/10;           /*进数*/
      }
  }
/*输出*/

  j=size-1;
  while(s[j]==0)j--;
  for(;j>=0;j--)
  {
     printf("%d",s[j]);
  }

  getch();

}

24 楼

晕,还没有看呢,这么多人帮忙啊,本来以为没有人写想帮个忙的,早知道这么多人回我就不写了,花了我个把小时呢,不要见笑,写得不好,呵,验证过了,没有错

25 楼

大数相乘 差不多

26 楼

这个似乎没那么简单吧,数字早就溢出了,精度不够,单纯的计算100的阶层的方法,都会,编程算出有难度吧

27 楼

高精度。。。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册