题解:P11062 【MX-X4-T2】「Jason-1」加法

P11062 题解

题面

原题传送门_

思路

首先一眼想到分讨。

  1. a×b0,即 a,b 同正负或者有一个为 0 的时候,考虑到每一次 aa+bba+b,只会不断地增加 |ab|,其的最小值一定为 min{|a|,|b|,|ab|},至于 |a|,|b| 怎么求其实很简单,令一个数变成 a+b,再减去另一个数即可。
  2. a×b<0,即 a,b 一正一负,则可以考虑辗转相减,知道两者同正负,正确性显然,当然辗转相减会超时,不能一个个减,需要用到取余,也就是把代码中的 - 改成 %

结束啦!!!赶紧打代码 A 了这道题!

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define ll long long
using namespace std;
ll a,b,T;
void write(ll n){if(n<0){putchar('-');write(-n);return;}if(n>9)write(n/10);putchar(n%10+'0');}
ll read(){ll x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;}
int main(){
    // freopen("1.in","r",stdin);
    T=read();while(T--){
        a=read();b=read();
        if(a==0||b==0) write(0);
        else if(a*b>0){
            a=abs(a);b=abs(b);
            write(min(min(abs(a),abs(b)),abs(b-a)));
        }
        else{
            while(a*b<0){
                if(abs(a)>abs(b)) a%=b;
                else b%=a;
            }
            write(min(abs(a),abs(b)));
        }
        putchar('\n');
    }
	return 0;
}
posted @   naroto2022  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示
花开如火,也如寂寞。