HEU 2022 How Many Fibs?

 1/**************************************
 2Problem: HEU 2022 How Many Fibs?
 3Time: 0.0270 s
 4Memory: 284 k 
 5Accepted Time: 2009-03-26 10:10:20
 6Tips: 高精度计算,打表 
 7**************************************/

 8#include <stdio.h>
 9#include <string.h>
10char table[510][110];
11void add(char* a,char* b,char* c)
12{
13    int i,j,k,max,min,n,temp;
14    char *s,*pmax,*pmin;
15    max=strlen(a);
16    min=strlen(b);
17    if (max<min)
18    {
19        temp=max;
20        max=min;
21        min=temp;
22        pmax=b;
23        pmin=a;
24    }

25    else
26    {
27        pmax=a;
28        pmin=b;
29    }

30    s=new char[max+1];
31    s[0]='0';
32    for (i=min-1,j=max-1,k=max;i>=0;i--,j--,k--)
33     s[k]=pmin[i]-'0'+pmax[j];
34    for (;j>=0;j--,k--)
35     s[k]=pmax[j];
36    for (i=max;i>=0;i--)
37     if (s[i]>'9')
38     {
39         s[i]-=10;
40         s[i-1]++;
41        }

42    if (s[0]=='0')
43    {
44        for (i=0;i<=max;i++)
45         c[i-1]=s[i];
46        c[i-1]='\0';
47    }

48    else
49    {
50        for (i=0;i<=max;i++)
51         c[i]=s[i];
52        c[i]='\0';
53    }

54    delete s;
55}

56int numcmp(char *a,char *b)
57{
58    int lena=strlen(a);
59    int lenb=strlen(b);
60    if(lena!=lenb)return lena-lenb;
61    else return strcmp(a,b);
62}

63int main()
64{
65    char a[110],b[110];
66    int n;
67    strcpy(table[0],"1");
68    strcpy(table[1],"2");
69    for(n=2;n<=485;n++)add(table[n-2],table[n-1],table[n]);
70    while(1)
71    {
72        scanf("%s%s",a,b);
73        if(strcmp(a,"0")==0&&strcmp(b,"0")==0)break;
74        int i=0,max,min=-1;
75        while(1)
76        {
77            if(min==-1&&numcmp(table[i],a)>=0)min=i;    
78            if(numcmp(table[i],b)==0){max=i+1;break;}
79            if(numcmp(table[i],b)>0){max=i;break;}        
80            i++;
81        }

82        printf("%d\n",max-min);
83    }

84    return 0;
85}

86
posted @ 2009-04-02 12:03  主函数  阅读(277)  评论(0编辑  收藏  举报