计算两正整数的减法,结果可能小于0.所谓高精度就是指可以计算超出计算机量程范围的数的减法。
#include<iostream>
#include<vector>
#include<string>
using namespace std;
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 = 0;
else t = 1;
}
while (c.size() > 1 && c.back() == 0) c.pop_back();
return c;
}
//
//vector<int> chang_num(int num) //把一个正整数按位存到vector数组中 123 存入321 这个方法太蠢了,数据过大处理不了。
//{
// vector<int> res;
// while (num > 0)
// {
// int temp = num % 10;
// res.push_back(temp);
// num -= temp;
// num = num / 10;
// }
// return res;
//}
vector<int> chang_num(string num) //以字符串的形式把数字按位存到数组中
{
vector<int> res;
for (int i = 1; i <num.size(); i++)
{
res.push_back(num[num.size() - i] - '0');
//res.insert(num.begin(), num[num.size() - i] - '0');
}
res.push_back(num[0] - '0');
return res;
}
int main()
{
string num1;
string num2;
vector<int> A;
vector<int> B;
vector<int> c;
cin >> num1;
cin >> num2;
/*long long a = stoll(num1);
long long b = stoll(num2);*/
A = chang_num(num1);
B = chang_num(num2);
/*for(int i=0;i<A.size();i++)
cout<<A[i];*/
if ((num1<num2 && num1.size()==num2.size()) || num1.size()<num2.size())
{
c = sub(B, A);
cout << '-';
for (int i = c.size() - 1; i > -1; i--)
{
cout << c[i];
}
}
else
{
c = sub(A, B);
for (int i = c.size() - 1; i > -1; i--)
{
cout << c[i];
}
}
return 0;
}