题目链接:
题解:
如果数据在
106
左右,可以直接用
(b−a)∗5√+12
。但是这道题数据是
1018
,那么直接乘的话,肯定会有精度问题。那么我么可以上Java大数的。但是我不会Java啊… 我们也可以直接大数乘法手动模拟。为了提高精度,我们将
0.618033988749894848204586834...
拆成三部分的整数放进数组里,然后手动模拟乘法。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
//0.618033988749894848204586834... 拆成整数放进数组里,
//拆成三部分即可
ll tmp[3] = {618033988,749894848,204586834};
ll MOD = 1e9;
int main()
{
int t;
scanf("%d",&t);
while(t --)
{
ll a,b;
scanf("%lld%lld",&a,&b);
if(a > b)
{
ll t = a;
a = b;
b = t;
}
ll diff = b - a;
//把10^18分成两部分10^9
ll ta = diff / MOD;
ll tb = diff % MOD;
ll tp = tb * tmp[2];
tp = ta * tmp[2] + tb * tmp[1] + tp / MOD;
tp = ta * tmp[1] + tb * tmp[0] + tp / MOD;
tp = ta * tmp[0] + tp / MOD + diff;
if(tp == a)
printf("B\n");
else
printf("A\n");
}
return 0;
}