高精度乘低精度
//string版本// C = A * b, A >= 0, b > 0vector<int> mul(vector<int> &A, int b){ vector<int> C; int t = 0; for (int i = 0; i < A.size() || t; i ++ ) { if (i < A.size()) t += A[i] * b; C.push_back(t % 10); t /= 10; } while (C.size() > 1 && C.back() == 0) C.pop_back(); return C;}
//一维数组版本void mul(int A[], int x){ int t = 0; for (int i = 0; i < len; i++) { A[i] = A[i] * x + t; if (A[i] >= 10) t = 1; else t = 0; A[i] %= 10; } if (t) A[len++] = 1;}
高精度乘高精度
vector<int> mul(vector<int> A, vector<int> B){ vector<int> C(A.size() + B.size()); for (int i = 0; i < A.size(); i ++ ) for (int j = 0; j < B.size(); j ++ ) C[i + j] += A[i] * B[j]; for (int i = 0, t = 0; i < C.size() || t; i ++ ) { t += C[i]; if (i >= C.size()) C.push_back(t % 10); else C[i] = t % 10; t /= 10; } while (C.size() > 1 && !C.back()) C.pop_back(); return C;}
//一维数组版本 for (int i = a.size()- 1; i >= 0; i--) A[lena++] = a[i] - '0'; for (int i = b.size()- 1; i >= 0; i--) B[lenb++] = b[i] - '0'; for (int i = 0; i < lena; i++) for (int j = 0; j < lenb; j++) C[i + j] += A[i] * B[j]; for (int i = 0; i < lena + lenb; i++) { C[i + 1] += C[i] / 10; C[i] %= 10; } int lenc = lena + lenb; while (lenc > 0 && C[lenc] == 0) lenc--; for (int i = lenc; i >= 0; i--) cout << C[i]; puts("");