高精度减法

  1. // C = A - B, 满足A >= B, A >= 0, B >= 0
  2. vector<int> sub(vector<int> &A, vector<int> &B)
  3. {
  4. vector<int> C;
  5. for (int i = 0, t = 0; i < A.size(); i ++ )
  6. {
  7. t = A[i] - t;
  8. if (i < B.size()) t -= B[i];
  9. C.push_back((t + 10) % 10);
  10. if (t < 0) t = 1;
  11. else t = 0;
  12. }
  13. while (C.size() > 1 && C.back() == 0) C.pop_back();
  14. return C;
  15. }
  1. // 一维数组版本
  2. void add(int A[], int B[], int C[])
  3. {
  4. int t = 0;
  5. for (int i = 0; i < lena; i++)
  6. {
  7. t = A[i] - t;
  8. if (i < lenb) t -= B[i];
  9. C[lenc++] = (t + 10) % 10;
  10. if (t < 0) t = 1;
  11. else t = 0;
  12. }
  13. while (lenc > 0 && C[lenc] == 0) lenc--;
  14. }

例题:1169:大整数减法

  1. // 1. vector<>模板做法
  2. // 2. 一维数组方法
  3. // 核心代码是,t = A[i] - t; t表示的是借位