您的位置:首页 > 其它

zoj 1962 How Many Fibs

2011-08-02 21:39 525 查看
//不够精简,效率也不高,以后学了傅里叶变换再做吧。。。
#define LOCAL
#include<iostream>
#include<cstring>
#define N 1001
using namespace std;
int cmp(int a
,string s)
{
char t;
string b=s;
int i,la,lb=b.size();
for(i=0;i<lb/2;i++)
{
t=b[i];
b[i]=b[lb-i-1];
b[lb-i-1]=t;
}
lb--;
la=N-1;
while(!a[la]) la--;
if(la>lb)
return 1;
else if(la<lb)
return -1;
else
{
if(a[la]==(b[la]-'0')) //这里的判断也出了错误。。。
{
i=la;
while(a[i]==(b[i]-'0')&&i>=0) i--;
if(i<0)
return 0;
else if(a[i]>(b[i]-'0'))
return 1;
else return -1;
}
else if(a[la]>(b[la]-'0'))
return 1;
else return -1;
}

}
int main()
{
#ifdef LOCAL
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
#endif
int sum
,a
,b
,n,i,t,count;
string x,y;
while(cin>>x>>y)
{
if(x=="0"&&y=="0")
return 0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(sum,0,sizeof(sum));
b[0]=1;
count=0;
while(1)
{
for(i=0;i<N;i++)
sum[i]=a[i]+b[i];
for(i=0;i<N;i++)
{
t=sum[i]/10;
sum[i]=sum[i]%10;
sum[i+1]+=t;
}
if(cmp(sum,x)>=0&&cmp(sum,y)<=0)   //cmp()一直出错,哎。。。
count++;
else if(cmp(sum,y)>0)   //这的条件弄错了,纠结了好半天。。。
break;
memcpy(a,b,sizeof(int)*N);
memcpy(b,sum,sizeof(int)*N);
}
cout<<count<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: