How Many Fibs?
#include<iostream>
#include<string>
#include<string.h>
using namespace std;
string operator +(string &a,string &b)
{
int i;
int sum[2001]={0};
int len1=a.length();
int len2=b.length();
for(i=0;i<len1;i++)
sum[i]+=a[len1-i-1]-'0';
for(i=0;i<len2;i++)
sum[i]+=b[len2-i-1]-'0';
int max=len1>len2?len1:len2;
for(i=0;i<max;i++)
{
if(sum[i]>9)
{
sum[i+1]+=sum[i]/10;
sum[i]%=10;
if(i==max-1)
max++;
}
}
string tmp="";
for(i=max-1;i>=0;i--)
tmp+=(sum[i]+'0');
return tmp;
}
string fib[1024];
int main()
{
string s1,s2;
fib[0]="1";
fib[1]="1";
for(int i=2;i<1024;i++)
fib[i]=fib[i-1]+fib[i-2]; //运算符重载。
while(cin>>s1>>s2)
{
if(s1[0]=='0'&&s2[0]=='0') break;
int i=1,j=1,flag=0;
while(fib[i].length()<s1.length()||fib[i]<s1)
{
if(fib[i].length()>s1.length()) break;
i++;
}
// cout<<i<<endl;
j=i;
while(fib[j].length()<s2.length()||fib[j]<=s2)
{
if(fib[j].length()>s2.length()) break;
else if(fib[j]==s2) { flag=1;break;} //注意此处。
j++;
}
//cout<<j<<endl;
cout<<j-i+flag<<endl;
}
return 0;
}