程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> 求n!的程序(n=1&&n=1000)

求n!的程序(n=1&&n=1000)

編輯:C語言基礎知識

  這個程序寫得比較亂,沒好好整理.因為數字大於700的話就要超出屏幕了,所以就用科學表示方法了,其實程序有點浪費空間的,有些地方還可以改進的.
  /*跳蚤偵察2003.9.26*/
  #define N 3000
  void pr1(int *num)/*科學方式輸出階層*/
  {
   int i,j;
   for(i=0;;i++)
    if(num[i]!=0)
     {
      printf("%d",num[i]);
      printf(".");
      for(j=i+1;j<=i+11;j++)
      printf("%d",num[j]);
      printf("e+");
      printf("%d ",N-i-1);
      break;
     }
  }
  void pr(int *num)/*輸入結果*/
  {int i,j;
   for(i=0;;i++)
    if(num[i]!=0)
     {
     for(j=i;j<N;j++)
      printf("%d",num[j]);
     break;
     }
   printf(" ");
  }
  fun(int num[],int numx[],int x,int y)/*相乘結果函數*/
  {int t[N],i,j,k,tt[N]={0};/*tt數組用來存放豎式的每一行*/
   for(i=0;i<N;i++)/*用來反復乘第一行*/
    {t[i]=num[i];num[i]=0;}
   for(i=3;i>=3-y;i--)/*1位到3位的乘法*/
    {
     for(j=N-1;j>=N-x;j--)
      tt[j+i-3]=numx[i]*t[j];/*記錄數式*/
     for(j=N-1;j>=1;j--)/*這裡其實可以用個變量來算每一行到第幾位,這樣可以節約時間*/
    if(tt[j]>=10)
     {
      tt[j-1]+=tt[j]/10;
      tt[j]=tt[j]%10;
     }
     for(j=0;j<N;j++)/*豎式相加得出最後乘出來的結果*/ 
     {num[j]+=tt[j];tt[j]=0;}
    }
   for(i=N-1;i>=N-x;i--)/*結果進位*/
    if(num[i]>=10)
     {
      num[i-1]+=num[i]/10;
      num[i]=num[i]%10;
     }
  }
   main()
  {int num[N]={0},numx[4]={0},i,x,y;
   int jx,jy=0;
   clrscr();
   printf("please input n: ");
   scanf("%d",&jx);
   num[N-1]=1;/*一直用來乘的變量初始值*/
   while(1)
   {
   jy++;
   numx[3]++;
   if(numx[3]==10)
   {numx[3]=0;numx[2]++;}
   if(numx[2]==10)/*個位數進位*/
   {numx[2]=0;numx[1]++;}
   if(numx[1]==10)/*十位數進位*/
   {numx[1]=0;numx[0]++;}
   for(i=0;i<N;i++)
    if(num[i]!=0)
     break;
   x=N-i;/*求結果的位數*/
   for(i=0;i<4;i++)
    if(numx[i]!=0)
     break;
   y=4-i;/*求階層的位數*/
   fun(num,numx,x,y);/*傳遞過去的兩個數,x是結果的位數,y是階層的位數*/
   if(jy==jx)/*階層大小的判定*/
    break;
   }
   printf("%d!=",jx);/*輸出結果*/
   if(jx<=700)
   pr(num);
   else
   pr1(num);
   getch();
  }
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved