c++ 超长整数减法 高精度减法
作者:互联网
c++ 超长整数减法 高精度减法
实现思路
- 和加法类似,设置临时变量记录借位
- 当对应位数相减得到的结果大于等于0时,该位数字为本身值,否则需要加上借位的10。则\(t=(t+10)%10\)
打卡代码
#include<bits/stdc++.h>
using namespace std;
bool cmp(vector<int> A, vector<int> B)
{
if(A.size() != B.size()) return A.size() > B.size(); //直接ruturn 了就不用else
for(int i = A.size(); i >= 0; i--)
if(A[i] != B[i])
return A[i] > B[i];
return true;
}
// a>=b,calculate a - b
vector<int> sub(vector<int> a, vector<int> b) {
vector<int> c;
int t;
for (int i = 0; i < a.size(); i++) {
t=a[i]-t;//被减数值,t为下一位的借位
if(i<b.size()) t-=b[i];
c.push_back((t+10)%10);
if(t<0) t=1;//结果小于0,说明要向上位借位
else t=0;
}
while(c.size()>1 && c.back() == 0) c.pop_back();//删除前导0
return c;
}
int main() {
string s1, s2;
vector<int> a, b, c;
cin >> s1 >> s2;
// cout<<s1<<endl;
for (int i = s1.size() - 1; i >= 0; i--) a.push_back(s1[i] - '0');
for (int i = s2.size() - 1; i >= 0; i--) b.push_back(s2[i] - '0');
bool flag=cmp(a,b);
if(flag) c = sub(a, b);
else c=sub(b, a);
if(!flag) cout<<"-";
for (int i = c.size() - 1; i >= 0; i--) {
cout << c[i];
}
return 0;
}
标签:int,s2,back,c++,--,超长,vector,减法,size 来源: https://www.cnblogs.com/xiaodaiguagua/p/16294641.html