2009-01-17 21:55:15來源不明

ACM 495 Fibonacci Freeze

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

  1. #include<stdio.h>   
  2. #include<stdlib.h>   
  3. #include<string.h>   
  4. #include<math.h>   
  5. int math[5001][1100];   
  6. main()   
  7. {   
  8.     
  9.  int a,b,n;   
  10.     math[0][0]=0;math[1][0]=1;   
  11.     for(a=2;a<=5000;a++)   
  12.      {   
  13.       for(b=0;b<=1099;b++)   
  14.         {   
  15.          math[a][b]=math[a][b]+math[a-1][b]+math[a-2][b];   
  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("The Fibonacci number for %d is ",n);   
  26.    if(n==0) printf("0\n");   
  27.    else    
  28.    for(a=1099;a>=0;a--)   
  29.     {   
  30.      if(math[n][a]!=0)   
  31.       {   
  32.       for(b=a;b>=0;b--)   
  33.        printf("%d",math[n][b]);   
  34.        break;   
  35.       }    
  36.     }   
  37.     printf("\n");   
  38.   }   
  39.  return 0;   
  40. } 

/************10億進位法[相加不超過21億]************************/

#include<stdio.h>     
#include<stdlib.h>     
int math[5001][120];     
main()     
{     
      
 int a,b,n;     
    math[0][0]=0;math[1][0]=1;     
    for(a=2;a<=5000;a++)     
     {     
      for(b=0;b<120;b++)     
        {     
         math[a][b]=math[a][b]+math[a-1][b]+math[a-2][b];     
          if (math[a][b]>=1000000000)     
           {     
            math[a][b+1]=math[a][b+1]+math[a][b]/1000000000;     
            math[a][b]=math[a][b]%1000000000;     
           }     
        }     
      }      
 while(scanf("%d",&n)==1)     
  {     
   printf("The Fibonacci number for %d is ",n);    
   if(n==0) printf("0");
   else
   for(a=119;a>=0;a--)     
    {     
     if(math[n][a]!=0)     
      {     
      printf("%d",math[n][a]);     
      for(b=a-1;b>=0;b--)     
       {      
        if(math[n][b]<1000000000&&math[n][b]>=100000000)       
        printf("%d",math[n][b]);     
        else if(math[n][b]<100000000&&math[n][b]>=10000000)        
        printf("0%d",math[n][b]);     
        else if(math[n][b]<10000000&&math[n][b]>=1000000)        
        printf("00%d",math[n][b]);   
        else if(math[n][b]<1000000&&math[n][b]>=100000)        
        printf("000%d",math[n][b]);     
        else if(math[n][b]<100000&&math[n][b]>=10000)        
        printf("0000%d",math[n][b]);
        else if(math[n][b]<1000&&math[n][b]>=100)        
        printf("00000%d",math[n][b]);  
        else if(math[n][b]<100&&math[n][b]>=10)        
        printf("000000%d",math[n][b]);
        else if(math[n][b]<10)        
        printf("0000000%d",math[n][b]);     
       }     
       break;   
      }      
    }     
    printf("\n");     
  }     
 return 0;     
}

    許\胖 2009-03-13 22:38:44

    好險我是用C++
    (慶幸中)

    版主回應
    . 2009-04-19 19:16:25
    rick 2009-02-10 11:25:22

    感謝你!!!
    ^ ^

    rick 2009-02-08 21:03:54

    感謝你題供程式碼
    我會用大數運算
    可是是用cin>>A>>B
    我不會用這一種
    你可以教我ㄇ

    可以用c++嗎??
    Thank you

    版主回應
    . 2009-04-19 19:16:44