HDU1316 fib+高精度

View Code
  1 #include<stdio.h>

  2 #include<string.h>

  3 #include<algorithm>

  4 #include<stdlib.h>

  5 using namespace std;

  6 const int maxn = 205;

  7 char a[ maxn ],b[ maxn ],s[ maxn ];

  8 char fi[ 505 ][ maxn ];

  9 char tmp[ maxn ];

 10 

 11 void a_b_add( ){

 12     int i,t,la,lb;

 13     i=0;

 14     t=0;

 15     la=strlen(a)-1;

 16     lb=strlen(b)-1;

 17     while((la>=0)&&(lb>=0))

 18     {

 19         s[i]=a[la--]+b[lb--]+t-48;

 20         t=0;

 21         if(s[i]>'9')

 22         {

 23             t=1;

 24             s[i]=s[i]-10;

 25         }

 26         i++;

 27     }

 28     while((la>=0)&&(lb<0))

 29     {

 30         s[i]=a[la--]+t;

 31         t=0;

 32         if(s[i]>'9')

 33         {

 34             s[i]=s[i]-10;

 35             t=1;

 36         }

 37         i++;

 38     }

 39     while((la<0)&&(lb>=0))

 40     {

 41         s[i]=b[lb--]+t;

 42         t=0;

 43         if(s[i]>'9')

 44         {

 45             s[i]=s[i]-10;

 46             t=1;

 47         }

 48         i++;

 49     }

 50     s[i]='0'+t;

 51     if(s[i]=='0')

 52         i--;

 53     int j=0;

 54     for( ;i>=0;i-- ) tmp[ j++ ]=s[ i ];

 55     tmp[ j++ ]='\0';

 56     strcpy( s,tmp );

 57     return ;

 58 }//a+b 高精度

 59 

 60 int cmp( char s1[],char s2[] ){

 61     int len1,len2;

 62     len1=strlen( s1 ),len2=strlen( s2 );

 63     if( len1>len2 ) return 1;// >

 64     if( len1<len2 ) return -1;// <

 65     if( strcmp( s1,s2 )==0 ) return 0;// =

 66     if( strcmp( s1,s2)<0 ) return -1;

 67     return 1;

 68 }

 69 

 70 int main(){

 71     a[ 0 ]=='1',a[ 1 ]='\0';

 72     b[ 0 ]='1',b[ 1 ]='\0';

 73     int cnt;

 74     fi[ 0 ][ 0 ]='1',fi[ 1 ][ 0 ]='1';

 75     cnt=1;

 76     for( int i=1;i<=500;i++ ){

 77         a_b_add( );

 78         strcpy( fi[ cnt ],s );

 79         strcpy( a,fi[ cnt ]),strcpy( b,fi[ cnt-1 ]);

 80         //printf("%d %s\n",strlen(fi[cnt]),fi[ cnt ]);

 81         cnt++;

 82     }

 83     

 84     while( scanf("%s %s",a,b)!=EOF ){

 85         if( a[0]=='0'&&b[0]=='0' ) break;

 86         int left,right;

 87         int temp;

 88         for( int  i=1;i<cnt;i++ ){

 89             temp=cmp( fi[ i ],a );

 90             if( temp>=0 ) {//fi[]>=a

 91                 left=i;

 92                 break;

 93             }

 94         }

 95         for( int  i=left;i<cnt;i++ ){

 96             temp=cmp( fi[ i ],b );

 97             if( temp>0 ) {//fi[]>a

 98                 right=i-1;

 99                 break;

100             }

101             else if( temp==0 ){

102                 right=i;

103                 break;

104             }

105         }

106         //printf("left:%d right:%d\n",left,right);

107         printf("%d\n",right-left+1);

108     }

109     return 0;

110 }

 

你可能感兴趣的:(HDU)