下面是vector实现的C++高精度减法函数。该函数假设被减数A大于等于减数B,并且A和B都是非负整数。
具体来说,该函数从低位开始逐位相减,并将差值存入结果数组C中。如果当前位的被减数小于减数,则需要向前一位借位。最后,去掉结果数组C中的前导零并返回。
// C = A - B, 满足A >= B, A >= 0, B >= 0
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; // 先将上一次借位的值t从当前位的被减数中减去
if (i < B.size()) t -= B[i]; // 如果还有减数,则再从当前位的t中减去
C.push_back((t + 10) % 10); // 将计算得到的差值存入结果数组C中(注意要加上10再取模)
if (t < 0) t = 1; // 如果当前位需要借位,则将t赋为1,否则赋为0
else t = 0;
}
while (C.size() > 1 && C.back() == 0) C.pop_back(); // 去掉结果数组C中的前导零
return C;
}