模拟乘法-51nod1185 威佐夫游戏 V2

来源:互联网 发布:码云 webhook php 编辑:程序博客网 时间:2024/04/29 10:49

思路:

因为数字过大,那么1.618后面的诸多位小数也会对其产生影响,那么将1.618后面诸多小数提取出来,模拟乘法

模拟乘法:

普通的a*b 手动托出乘法运算,对应位数运算,最后只要拿出对于整数有影响的第一位小数和整数部分即可。

判断拿出的数字*差值是否等于较小数a

#include <stdio.h>#include <algorithm>#include <cmath>#include <cstdlib>#include <iostream>#include <cstring>#define mod 1000000000long 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;    }}


0 0
原创粉丝点击