题解:P11062 【MX-X4-T2】「Jason-1」加法
P11062 题解
题面
思路
首先一眼想到分讨。
- a×b≥0,即 a,b 同正负或者有一个为 0 的时候,考虑到每一次 a←a+b 或 b←a+b,只会不断地增加 |a−b|,其的最小值一定为 min{|a|,|b|,|a−b|},至于 |a|,|b| 怎么求其实很简单,令一个数变成 a+b,再减去另一个数即可。
- 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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现