How Many Fibs?
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4961 Accepted Submission(s): 1932
Problem 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
5 4先打表,再转化成字符,再与输入的比较#include<stdio.h> #include<stdlib.h> #include<string.h> #include<algorithm> using namespace std; int F[600][110]={{0},{1},{2}}; char Fi[600][110]; char a[110]; char b[110]; void f() { int i,j,k; int c,s; for(i=3;i<600;i++) { for(j=0,c=0;j<110;j++) { s=F[i-1][j]+F[i-2][j]+c; F[i][j]=s%10; c=(s-F[i][j])/10; } } for(i=0;i<600;i++) { k=0; for(j=101;F[i][j]==0;j--) ; for(;j>=0;j--) { Fi[i][k++]=F[i][j]+'0'; } Fi[i][k]='\0'; } } int cmp(char a[], char b[]) { int alen=strlen(a),blen=strlen(b); int i,j; if(alen>blen) { return 1; } else if(alen<blen) { return -1; } else { return strcmp(a,b); } } int main() { int i,j,k; int sum; char temp[110]; f(); while(scanf("%s%s",a,b)!=EOF,a[0]!='0'||b[0]!='0') { sum=0; for(i=0;i<600;i++) { if(cmp(b,Fi[i])<0) { break; } if(cmp(a,Fi[i])<=0) { sum++; } } printf("%d\n",sum); } return 0; }