1 条题解
-
0
自动搬运
来自洛谷,原作者为

Lemon_zqp
致敬BYGF的传奇CYS || 愤怒带来冲动,伤感使人犹豫搬运于
2025-08-24 22:47:56,当前版本为作者最后更新于2023-06-03 22:41:34,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
思路
这道题的思路就是暴力模拟,如果 的位数大于 那么把 补足 位输出即可,否则算出 比 多出的那几位数,然后把这个数减一、者加一、不变得出三个数,放到 的前面,减去 ,然后取最小值例如 为 , 为 ,那么 比 多的部分就是 ,分三种情况让这个数插到 前面,减一或者加一或着不变,那么就产生三个数 ,,,接着把他们都补足 位,然后依次减去 取最小值即可,记得取绝对值,最后答案为 ,转换成代码也是非常简单。
代码
#include<bits/stdc++.h> using namespace std; int wei(long long a)//取a的位数 { int cnt = 0; while(a > 0) { cnt++; a /= 10; } return cnt; } long long qq(long long a, int t)//在a中取前t位 { int as = wei(a) - t; for(int i = 1; i <= as; i++) { a = a / 10; } return a; } long long qh(long long a, int t)//在a中取后t位 { int mo = 1; for(int i = 1; i <= t; i++) { mo *= 10; } return a % mo; } long long zero_num(int t)//范围10的t次方 { int mo = 1; for(int i = 1; i <= t; i++) { mo *= 10; } return mo; } int main() { long long y, z; cin >> y >> z; y = abs(y); z = abs(z); int wy = wei(y), wz = wei(z), wc = wz - wy; if(wy > wz) { cout << (100000000000 + y) - z; return 0; } long long s = qq(z, wc), x1, x2, x3; x1 = abs((s * zero_num(wy)) + y); x2 = abs(((s - 1) * zero_num(wy)) + y); x3 = abs(((s + 1) * zero_num(wy)) + y); if(wei(x1) < 12) { x1 = abs((100000000000 + y) - z);//补足12位 } else { x1 = abs(x1 - z); } if(wei(x2) < 12) { x2 = abs((100000000000 + y) - z);//补足12位 } else { x2 = abs(x2 - z); } if(wei(x3) < 12) { x3 = abs((100000000000 + y) - z);//补足12位 } else { x3 = abs(x3 - z); } if(x1 > x2) { swap(x1, x2); } if(x2 > x3) { swap(x2, x3); } if(x1 > x2) { swap(x1, x2); } cout << x1; return 0; }
- 1
信息
- ID
- 8546
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 1
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者