高精度乘低精度

  1. //string版本
  2. // C = A * b, A >= 0, b > 0
  3. vector<int> mul(vector<int> &A, int b)
  4. {
  5. vector<int> C;
  6. int t = 0;
  7. for (int i = 0; i < A.size() || t; i ++ )
  8. {
  9. if (i < A.size()) t += A[i] * b;
  10. C.push_back(t % 10);
  11. t /= 10;
  12. }
  13. while (C.size() > 1 && C.back() == 0) C.pop_back();
  14. return C;
  15. }
  1. //一维数组版本
  2. void mul(int A[], int x)
  3. {
  4. int t = 0;
  5. for (int i = 0; i < len; i++)
  6. {
  7. A[i] = A[i] * x + t;
  8. if (A[i] >= 10) t = 1;
  9. else t = 0;
  10. A[i] %= 10;
  11. }
  12. if (t) A[len++] = 1;
  13. }

例题:1170:计算2的N次方

高精度乘高精度

  1. vector<int> mul(vector<int> A, vector<int> B)
  2. {
  3. vector<int> C(A.size() + B.size());
  4. for (int i = 0; i < A.size(); i ++ )
  5. for (int j = 0; j < B.size(); j ++ )
  6. C[i + j] += A[i] * B[j];
  7. for (int i = 0, t = 0; i < C.size() || t; i ++ )
  8. {
  9. t += C[i];
  10. if (i >= C.size()) C.push_back(t % 10);
  11. else C[i] = t % 10;
  12. t /= 10;
  13. }
  14. while (C.size() > 1 && !C.back()) C.pop_back();
  15. return C;
  16. }
  1. //一维数组版本
  2. for (int i = a.size()- 1; i >= 0; i--) A[lena++] = a[i] - '0';
  3. for (int i = b.size()- 1; i >= 0; i--) B[lenb++] = b[i] - '0';
  4. for (int i = 0; i < lena; i++)
  5. for (int j = 0; j < lenb; j++)
  6. C[i + j] += A[i] * B[j];
  7. for (int i = 0; i < lena + lenb; i++)
  8. {
  9. C[i + 1] += C[i] / 10;
  10. C[i] %= 10;
  11. }
  12. int lenc = lena + lenb;
  13. while (lenc > 0 && C[lenc] == 0) lenc--;
  14. for (int i = lenc; i >= 0; i--) cout << C[i];
  15. puts("");

例题:1174:大整数乘法