题目描述
高精度减法。
输入格式
两个整数 a,b(第二个可能比第一个大)。
输出格式
结果(是负数要输出负号)。
输入输出样例
输入
2 1
输出
1
说明/提示
- 20% 数据 a,b 在 long long 范围内;
- 100% 数据 0<a,b≤1010086。
#include<bits/stdc++.h> using namespace std; bool cmp(vector<int> &A,vector<int> &B)//比较A和B的大小 { if(A.size()!=B.size()) return A.size()>B.size(); for(int i=A.size()-1;i>=0;i--) { if(A[i]!=B[i]) return A[i]>B[i]; } return true; } vector<int> add(vector<int> &A,vector<int> &B) { vector<int> C; int t=0; for(int i=0;i<A.size();i++) { t=A[i]-t; if(i<B.size()) { t-=B[i]; } C.push_back((t+10)%10); if(t<0) { t=1; }else{ t=0; } } //去掉前导零 while(C.size()>1&&C.back()==0) { C.pop_back(); } 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> ans; if(cmp(A,B)) { ans=add(A,B); for(int i=ans.size()-1;i>=0;i--) cout<<ans[i]; }else{ ans=add(B,A); cout<<"-"; for(int i=ans.size()-1;i>=0;i--) cout<<ans[i]; } return 0; }