高精度减法
高精度减法模板https://www.acwing.com/problem/content/794/
减法注意要点:
- 对于
t = A[i] - B[i] - t
; 可以拆为t = A[i] - t
如果B[i]
合法,再t -= B[i]
这么两步来做 - 相减后
t
的处理 ,把t >= 0
和t < 0
用一个式子来表示t = (t + 10) % 10
这个木有想到 - A B大小判断,自己写的太冗余,
不如单独拎出来
#include <bits/stdc++.h> using namespace std; //判断是否A >= B bool cmp(vector<int> &A, vector<int> &B){ if(A.size() != B.size()) return A.size() > B.size(); //如果A,B不等,A大返回true,B大返回false for(int i = A.size() - 1; i >= 0; i--){ //如果A,B数位相等,按人类习惯就从高位开始比较 if(A[i] != B[i]) return A[i] > B[i]; //同上 } return true; //都一样就返回true,因为判断是A >= B; } vector<int> sub(vector<int> &A, vector<int> &B){ vector<int> C; for(int i = 0, t = 0; i < A.size(); i++){ //t表示借位 t = A[i] - t; if(i < B.size()) t -= B[i]; //判断B是否还有位数 C.push_back((t + 10) % 10); //合二为一 (1)t >= 0,输出t. (2)t < 0, 输出t + 10 if(t < 0) t = 1; //更新进位 else t = 0; } while(C.size() > 1 && C.back() == 0) C.pop_back(); //去除前导0 return C; } int main(){ string a, b; cin >> a >> b; vector<int> A, B; for(int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0'); for(int i = b.size() - 1; i >= 0; i--) B.push_back(b[i] - '0'); vector<int> C; if(cmp(A, B)) C = sub(A, B); //如果A >= B,直接减 else C = sub(B, A), cout << "-"; //A < B,先输出'-',再算 -(A - B) for(int i = C.size() - 1; i >= 0; i--) cout << C[i]; cout << endl; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!