Description
Recall the definition of the Fibonacci numbers:
f1 := 1
f2 := 2
fn := fn-1 + fn-2 (n >= 3)
Given two numbers a and b, calculate how many Fibonacci numbers are in the range [a, b].
f1 := 1
f2 := 2
fn := fn-1 + fn-2 (n >= 3)
Given two numbers a and b, calculate how many Fibonacci numbers are in the range [a, b].
Input
The input contains several test cases. Each test case consists of two non-negative integer numbers a and b. Input is terminated by a = b = 0. Otherwise, a <= b <= 10^100. The numbers a and b are given with no superfluous leading zeros.
Output
For each test case output on a single line the number of Fibonacci numbers fi with a <= fi <= b.
Sample Input
10 100 1234567890 9876543210 0 0
Sample Output
54
求a--b内斐波那契数的个数
#include<iostream> #include<cstring> #include<cstdio> using namespace std; string str[505],a,b; string add(string s1,string s2) { string temp; int i,j; if(s1.length()<s2.length()) { temp=s1; s1=s2; s2=temp; } for(int i=s1.length()-1,j=s2.length ()-1;i>=0;i--,j--) { s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0)); if(s1[i]-'0'>=10) { s1[i]=char((s1[i]-'0')%10+'0'); if(i) s1[i-1]++; else s1='1'+s1;//一定是这个顺序,1会加到s1前面 } } return s1; } int main() { int i,j,alen,blen,len,head,end; str[1]="1";str[2]="2"; for(i=3;i<505;i++) { str[i]=add(str[i-2],str[i-1]); } while(cin>>a>>b) { if(a=="0"&&b=="0") break; alen=a.length(); blen=b.length(); for(i=1;i<505;i++) { len=str[i].length(); if(len<alen) continue; if(len==alen&&str[i]>=a) { head=i; break; } else if(len>alen) { head=i; break; } } for(i=504;i>=1;i--) { len=str[i].length(); if(len>blen) continue; if(len==blen&&str[i]<=b) { end=i; break; } else if(len<blen) { end=i; break; } } printf("%d\n",end-head+1); } return 0; }