http://poj.org/problem?id=2413
2.Idea
Enumerating first 500 fibs numbers.
3.Source
string add(string a, string b)
{
if (a == "") return b;
if (b == "") return a;
if (a.length() < b.length()) swap(a, b);
int d = a.length() - b.length();
for (int i = 0; i < d; i++) {
b = "0" + b;
}
int car = 0;
int n = a.length();
for (int i = n - 1; i >= 0; i--) {
int tmp = car + a[i] + b[i] - '0' - '0';
a[i] = '0' + (tmp % 10);
car = tmp / 10;
}
if (car > 0) return "1" + a;
else return a;
}
bool isNotSmaller(string a, string b) // a <= b -> true
{
if (a == b) return true;
if (a.length() < b.length()) return true;
if (a.length() == b.length() && a <= b) return true;
return false;
}
bool isNotGreater(string a, string b) // a >= b -> true
{
if (a == b) return true;
if (a.length() > b.length()) return true;
if (a.length() == b.length() && a >= b) return true;
return false;
}
vector<string> fibs;
int main()
{
fibs.push_back("1");
fibs.push_back("1");
for (int i = 2; i < 500; i++) {
string tmp = add(fibs[i - 1], fibs[i - 2]);
fibs.push_back(tmp);
}
while (true) {
string a, b;
cin >> a >> b;
if (a == "0" && b == "0") break;
int cnt = 0;
for (int i = 1; i < 500; i++) {
if (isNotSmaller(a, fibs[i]) && isNotGreater(b, fibs[i])) cnt++;
}
cout << cnt << endl;
}
return 0;
}