24h購物| | PChome| 登入
2009-01-17 21:06:55| 人氣799| 回應0 | 上一篇 | 下一篇

ACM 623 500!

推薦 0 收藏 0 轉貼0 訂閱站台

往大數的方向又邁進了一步!

/************************************************************/

  1. #include<stdio.h>   
  2. #include<stdlib.h>   
  3. #include<string.h>   
  4. #include<math.h>   
  5. int math[1001][2601];                    /*設在裡面會爆炸*/   
  6. main()   
  7. {   
  8.     
  9.  int a,b,n;                              /*建立表格*/ 
  10.     math[0][0]=1;math[1][0]=1;           /*起始值*/
  11.     for(a=2;a<1001;a++)   
  12.      {   
  13.       for(b=0;b<2600;b++)   
  14.         {                                /*挖下面的陣列來乘*/
  15.          math[a][b]=math[a][b]+math[a-1][b]*a;   
  16.           if (math[a][b]>=10)   
  17.            {   
  18.             math[a][b+1]=math[a][b+1]+math[a][b]/10;   
  19.             math[a][b]=math[a][b]%10;   
  20.            }   
  21.         }   
  22.       }    
  23.  while(scanf("%d",&n)==1)   
  24.   {   
  25.    printf("%d!\n",n);    
  26.    for(a=2599;a>=0;a--)   
  27.     {   
  28.      if(math[n][a]!=0)   
  29.       {   
  30.       for(b=a;b>=0;b--)   
  31.        printf("%d",math[n][b]);   
  32.        break;   
  33.       }    
  34.     }   
  35.     printf("\n");   
  36.   }   
  37.  return 0;   
  38. }

/******************************萬進版本************************/

     
  1. #include<stdio.h>         
  2. #include<stdlib.h>         
  3. int math[1001][650];         
  4. main()         
  5. {         
  6.           
  7.  int a,b,n;         
  8.     math[0][0]=1;math[1][0]=1;         
  9.     for(a=2;a<1001;a++)         
  10.      {         
  11.       for(b=0;b<650;b++)         
  12.         {         
  13.          math[a][b]=math[a][b]+math[a-1][b]*a;         
  14.           if (math[a][b]>=10000)         
  15.            {         
  16.             math[a][b+1]=math[a][b+1]+math[a][b]/10000;         
  17.             math[a][b]=math[a][b]%10000;         
  18.            }         
  19.         }         
  20.       }          
  21.  while(scanf("%d",&n)==1)         
  22.   {         
  23.    printf("%d!\n",n);          
  24.    for(a=649;a>=0;a--)         
  25.     {         
  26.      if(math[n][a]!=0)         
  27.       {         
  28.        printf("%d",math[n][a]);      
  29.       for(b=a-1;b>=0;b--)      
  30.        {       
  31.         if(math[n][b]<10000&&math[n][b]>=1000)        
  32.         printf("%d",math[n][b]);      
  33.         else if(math[n][b]<1000&&math[n][b]>=100)         
  34.         printf("0%d",math[n][b]);      
  35.         else if(math[n][b]<100&&math[n][b]>=10)         
  36.         printf("00%d",math[n][b]);      
  37.         else if(math[n][b]<10)         
  38.         printf("000%d",math[n][b]);      
  39.        }      
  40.        break;         
  41.       }          
  42.     }         
  43.     printf("\n");         
  44.   }         
  45.  return 0;         
  46. }  

 

    台長: 來源不明
    人氣(799) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
    全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: ACM |
    此分類下一篇:ACM 10220 I Love Big Numbers
    此分類上一篇:ACM 10082 WERTYU

    是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
    * 請輸入識別碼:
    請輸入圖片中算式的結果(可能為0) 
    (有*為必填)
    TOP
    詳全文