Description
q=5√+12, 在黄金系统下面a0a1...an 等于
,其中 ai 是0或者1。
现在给出两个黄金系统下面的数字,请比较他们的大小。
Input
单组测试数据。
第一行有一个字符串A。
第二行有一个字符串B。
按照a0到an的顺序输入。
他们都是非空串,可能有前导0,并且只有0和1组成,长度不超过100000。
Output
如果A>B,输出>;
如果A=B,输出=;
如果A<B,输出<;
Input示例
00100
11
Output示例
=
解题思路
q2 = 1 + q;遇到011时进位成100,从低位往高位进位,进位到不能进位为止,然后去掉前导零,判断大小即可。
Code
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#define MAXN 100010
using namespace std;
char A[MAXN],B[MAXN];
void solve(char * str)
{
int len = strlen(str);
for(int i = len; i>0; i--)
str[i] = str[i-1];
str[0] = '0';
len++;
for(int i = len - 3; i >=0 ; i--)
{
if(str[i] == '0' && str[i + 1] == '1' && str[i+2] == '1')
{
str[i] = '1', str[i+1] = '0', str[i+2] = '0';
}
}
int s;
for(int i = 0; i < len;)
if(str[i] == '0') i++;
else
{
s = i;
break;
}
int i,j;
for(i = 0, j = s; j < len; i++,j++)
str[i] = str[j];
str[i] = '\0';
}
int main()
{
scanf("%s%s",A,B);
solve(A);
solve(B);
int lenA = strlen(A),lenB = strlen(B);
if(lenA ==lenB)
{
int i;
for(i = 0; i < lenA; i++)
{
if(A[i] == '1' && B[i] == '0')
{
puts(">");
break;
}
else if(A[i] == '0' && B[i] == '1')
{
puts("<");
break;
}
}
if(i == lenA)
puts("=");
}
else
{
lenA < lenB ? puts("<") : puts(">");
}
return 0;
}
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#define MAXN 100010
using namespace std;
char A[MAXN],B[MAXN];
void solve(char * str)
{
int len = strlen(str);
for(int i = len; i>0; i--)
str[i] = str[i-1];
str[0] = '0';
len++;
for(int i = len - 3; i >=0 ; i--)
{
if(str[i] == '0' && str[i + 1] == '1' && str[i+2] == '1')
{
str[i] = '1', str[i+1] = '0', str[i+2] = '0';
}
}
int s;
for(int i = 0; i < len;)
if(str[i] == '0') i++;
else
{
s = i;
break;
}
int i,j;
for(i = 0, j = s; j < len; i++,j++)
str[i] = str[j];
str[i] = '\0';
}
int main()
{
scanf("%s%s",A,B);
solve(A);
solve(B);
int lenA = strlen(A),lenB = strlen(B);
if(lenA ==lenB)
{
int i;
for(i = 0; i < lenA; i++)
{
if(A[i] == '1' && B[i] == '0')
{
puts(">");
break;
}
else if(A[i] == '0' && B[i] == '1')
{
puts("<");
break;
}
}
if(i == lenA)
puts("=");
}
else
{
lenA < lenB ? puts("<") : puts(">");
}
return 0;
}