1. 程式人生 > >模擬乘法-51nod1185 威佐夫遊戲 V2

模擬乘法-51nod1185 威佐夫遊戲 V2

思路:

因為數字過大,那麼1.618後面的諸多位小數也會對其產生影響,那麼將1.618後面諸多小數提取出來,模擬乘法

模擬乘法:

普通的a*b 手動托出乘法運算,對應位數運算,最後只要拿出對於整數有影響的第一位小數和整數部分即可。

判斷拿出的數字*差值是否等於較小數a

#include <stdio.h>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <iostream>
#include <cstring>
#define mod 1000000000
long long t[3] = {618033988, 749894848, 204586834};
using namespace std;
int main(void){
    int T;
    cin>>T;
    while(T--)
    {
        long long a,b;
        cin>>a>>b;
        if(a>b)
            swap(a,b);
        long long temp=b-a;
        long long l=temp/mod;
        long long r=temp%mod;
        long long ans = ((r*t[2]/mod+(r*t[1]+l*t[2]))/mod+(r*t[0]+l*t[1]))/mod+l*t[0] +b-a;
        if(ans==a)
            cout<<"B"<<endl;
        else
            cout<<"A"<<endl;

    }
}