現在給出兩個黃金系統下面的數字,請比較他們的大小。
先推一下:
發現
於是有:
這不就是斐波拉契數列??
於是就可以做了
斐波拉契數列的判大小,看程序吧
#define N 100010
char a[N],b[N];
int n,m,c[N],d[N];
int main()
{
scanf("%s%s",a+1,b+1);
n=strlen(a+1);
m=strlen(b+1);
fr(i,1,n)
c[i]=a[n-i+1]-48;
fr(i,1,m)
d[i]=b[m-i+1]-48;
while(!c[n])
n--;
while(!d[m])
m--;
n=max(n,m);
fr(i,1,n)
c[i]-=d[i];
fd(i,n,1)
{
if(c[i]>=2)
{
printf(">\n");
return 0;
}
if(c[i]<=-2)
{
printf("<\n");
return 0;
}//這兩個在下面解釋
if(i>=3)
{
c[i-1]+=c[i];
c[i-2]+=c[i];
c[i]=0;
}
}
if(c[2]<0)
printf("<\n");
else
if(c[2]>0)
printf(">\n");
else
if(c[1]<0)
printf("<\n");
else
if(c[1])
printf(">\n");
else
printf("=\n");//最後兩位特判掉(相當於邊界)
return 0;
}
解釋:
滿足
我們可以得到:
在提出來:
其中:
又得到了開始的情況!
所以
然後