高精度减法
给定两个正整数(不含前导 00),计算它们的差,计算结果可能为负数。
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的差。
数据范围
1≤整数长度≤1051≤整数长度≤105
输入样例:
输出样例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #include<iostream> #include<vector> using namespace std;
bool cmp(vector<int> a,vector<int> 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> sub(vector<int> a,vector<int> b){ vector<int> c; for(int i=0,t=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 n,m; cin>>n>>m; vector<int> a,b; for(int i=n.size()-1;i>=0;i--) a.push_back(n[i]-'0'); for(int i=m.size()-1;i>=0;i--) b.push_back(m[i]-'0'); vector<int> c; if(cmp(a,b)) c=sub(a,b); else { cout<<"-"; c=sub(b,a); } for(int i=c.size()-1;i>=0;i--) cout<<c[i]; return 0; }
|