大整数相减
类似于加法
重点在于两个数谁是减数,谁是被减数
还有最后的消0操作
C++ 代码
#include<iostream>
#include<vector>
using namespace std;
int N = 10010;
//假设A>=B为true
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;
}
//C = A - B
vector<int> sub(vector<int> &A,vector<int> &B)
{
vector<int> C;
int t = 0;
for(int i = 0;i<A.size() || i<B.size();i++)
{
//这个地方必须得是A[i] - t 所以不能写成 t -= A[i]
if(i < A.size()) 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;
}
//删除所有多余的0
while(C.size()>1 && C.back()==0) C.pop_back();
return C;
}
int main()
{
string num1,num2;
cin>>num1>>num2;
vector<int> a,b;
for(int i = num1.size()-1;i>=0;i--) a.push_back(num1[i]-'0');
for(int i = num2.size()-1;i>=0;i--) b.push_back(num2[i]-'0');
if(cmp(a,b))
{
auto c = sub(a,b);
for(int i = c.size()-1;i>=0;i--) printf("%d",c[i]);
}
else
{
auto c = sub(b,a);
printf("-");
for(int i = c.size()-1;i>=0;i--) printf("%d",c[i]);
}
return 0;
}