51nod 1491 黄金系统

本文介绍了一种基于黄金分割原理的算法实现,该算法利用斐波那契数列特性进行数值比较,并通过示例代码展示了如何从高位向低位转移计算两个数的差值绝对值直至结果确定的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于黄金分割,所以

q^x=q^(x-1)+q(x-2)

因此,可以将其视为斐波那契数列中,若干项的和。

可以从高位向低位转移。

若某一位上,两者之差的绝对值大于2,则代表已经计算出结果。

因为

(sun(fib(x)),x∈[1,n] ) ≤ fib(n+1)*2

#include <bits/stdc++.h>
using namespace std;

string s1,s2;
int a[100100],b[100100],vis[100100];

int main()
{
	int i,j,tmp,len;
	while(cin>>s1>>s2)
	{
		reverse(s1.begin(),s1.end());
		reverse(s2.begin(),s2.end());
		len=max(s1.length(),s2.length());
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));
		for(i=0;i<s1.length();i++)
			a[i]+=s1[i]-'0';
		for(i=0;i<s2.length();i++)
			a[i]-=s2[i]-'0';
		for(i=len;i>=2;i--)
		{
			if(abs(a[i])>=2)
			{
				if(a[i]>0)
					printf(">\n");
				else
					printf("<\n");
				break;
			} 
			a[i-1]+=a[i];
			a[i-2]+=a[i];
			a[i]=0;
		}
		if(i==1)
		{
			for(i=1;i>=0;i--)
			{
				if(a[i]>0)
					printf(">\n");
				if(a[i]<0)
					printf("<\n");
				if(a[i])
					break;
			}
			if(i==-1)
				printf("=\n");
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值