HEU 2022 How Many Fibs?
1
/**************************************
2
Problem: HEU 2022 How Many Fibs?
3
Time: 0.0270 s
4
Memory: 284 k
5
Accepted Time: 2009-03-26 10:10:20
6
Tips: 高精度计算,打表
7
**************************************/
8
#include <stdio.h>
9
#include <string.h>
10
char table[510][110];
11
void 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
}
56
int 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
}
63
int 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
/**************************************2
Problem: HEU 2022 How Many Fibs?3
Time: 0.0270 s4
Memory: 284 k 5
Accepted Time: 2009-03-26 10:10:206
Tips: 高精度计算,打表 7
**************************************/8
#include <stdio.h>9
#include <string.h>10
char table[510][110];11
void 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
else26
{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
else49
{50
for (i=0;i<=max;i++)51
c[i]=s[i];52
c[i]='\0';53
}54
delete s;55
}56
int 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
}63
int 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




浙公网安备 33010602011771号