今日学习:高精度减法
注意事项:
-
由于需要考虑负数,所以一定要保证被减数大于减数(如果发生这种情况,需要输出
-
号) -
看一下过程:
- 这里需要有一个借位,因此需要和乘法一样记住借位
代码
#include <iostream>
#include <vector>
#include <string>
using namespace std;
vector<int> sub(vector<int> &A,vector<int> &B)
{
int t=0;
vector<int> C;
for (int i=0;i<A.size();i++)
{
t=A[i]-t;
if (i<B.size())
{
t-=B[i];
}
C.push_back((10+t)%10);
if (t<0)
{
t=1;
}
else
{
t=0;
}
}
while (C.size()>1&&C.back()==0)
{
C.pop_back();
}
return C;
}
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;
}
int main() {
vector<int> a,b;
string s1,s2;
cin>>s1>>s2;
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');
}
vector<int> c;
if (cmp(a,b))
{
c=sub(a,b);
}
else
{
c=sub(b,a);
cout<<'-';
}
for (int i=c.size()-1;i>=0;i--)
{
cout<<c[i];
}
return 0;
}