这题算是卡了我很久了因为我的思维现在还跟不上算法…其实主要原因是菜。。
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
**int cmp(string a,string b){
if(b.size()==a.size()){
if(a==b)
return 0;
return a>b ? 1:-1;
}
return a.size()>b.size() ? 1:-1;
}**
string add(string s1,string s2){
string s;
int len1=s1.size()-1;
int len2=s2.size()-1;
int temp,num=0;//temp 临时存放数据,num为进位
while(len1>=0&&len2>=0){
temp=(s1[len1]-'0')+(s2[len2]-'0')+num;
s+=char(temp%10+'0');//将每一位储存
num=temp/10;
len1--;
len2--;
}
while(len1>=0){
temp=(s1[len1]-'0')+num;
s+=char(temp%10+'0');
num=temp/10;
len1--;
}
while(len2>=0){
temp=(s2[len2]-'0')+num;
s+=char(temp%10+'0');
num=temp/10;
len2--;
}
if(num>0){//全部加完还有进位
s+=char(num+'0');
}
reverse(s.begin(),s.end());//反转s
return s;
}
void fib(string fibs[500]){
fibs[1]="1";//初始化fibs
fibs[2]="2";
for(int i=3;i<=485;i++){
fibs[i]=add(fibs[i-1],fibs[i-2]);
}
}
int main(){
string a,b;
string fibs[500];
fib(fibs);
while(cin>>a>>b){
if(a=="0"&&b=="0")
break;
else{
int count=0;
for(int i=1;i<=485;i++){
**if(cmp(a,fibs[i])<=0&&cmp(b,fibs[i])>=0){//fibs[i]比a大,fibs[i]比b小**
count++;
}else if(cmp(b,fibs[i])==0){
break;
}
}
cout<<count<<endl;
}
}
return 0;
}
加**的地方是我没考虑到的情况也就是a,b斐列波数一致的时候。