`#include[HTML_REMOVED]
include[HTML_REMOVED]
include[HTML_REMOVED]
using namespace std;
vector[HTML_REMOVED] A;
vector[HTML_REMOVED] B;
//先创建两个向量数组,一个作为被减数容器,一个作为减数容器
int cmp(vector[HTML_REMOVED]& A, vector[HTML_REMOVED]& B)
{
if (A.size() != B.size()) return A.size() > B.size(); //如果位数不同 返回A和B位数长短比较的结果
else // 如果位数长短相同,则针对每一位上的数字大小进行判断
{
for (int i = A.size() - 1; i >= 0; i–)//因为容器都是反向存储的,从最后一位开始,即为从数字的最高开始
{
if (A[i] != B[i])
{
return A[i] > B[i];//如果数字有一个不同,则返回A,B大小比较的结果
}
}
}
return true;
}
vector[HTML_REMOVED] sub(vector[HTML_REMOVED]& A, vector[HTML_REMOVED]& B)// 减法函数
{
vector[HTML_REMOVED] C; // 结果数组
for (int i = 0, t = 0; i < A.size(); i++)// 初始化的时候,借位计数器的值为0
{
// C[i] = A[i] - B[i] - T; 这里的T为被低一位所借走的数字
t = A[i] - t;
if (i < B.size()) t = t - B[i]; //如果这一位上B仍然有数字 则相减
C.push_back((t + 10) % 10);// 如果T大于0,则结果数组中放入T
// 如果T小于0,则结果数组中放入10 - T (向高位借1,本位加10)
if (t < 0) t = 1;// 如果T<0 则说明要向上位借1 所以借位计数器器为1
else t = 0;// 如果不需要借位 则借位计数器置为0
}
while (C.size() > 1 && C.back() == 0) C.pop_back();// 去掉前导0
return C;
}
int main(void)
{
string a, b;
cin >> a >> b;
for (int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0');
for (int i = b.size() - 1; i >= 0; i--) B.push_back(b[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;
};`