classSolution { public: stringmultiply(string num1, string num2){ //高精度乘法 int n = num1.size(),m = num2.size(); vector<int> A, B; for(int i = n - 1; i >= 0; i--) A.push_back(num1[i] - '0');//将其映射为逆序的数字 for(int i = m - 1; i >= 0; i--) B.push_back(num2[i] - '0');//同上
vector<int> C(n + m); for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) C[i + j] += A[i] * B[j]; //处理乘积,暂时忽略进位 for(int i = 0, t = 0; i < C.size(); i++){ //t表示进位,这里将C[i]处理成最终的答案的逆序 t += C[i]; C[i] = t % 10; //把个位数找出来,并赋值给C的对应位置 t /= 10; }
int k = C.size() - 1; //k代表数字位数 while(k > 0 && !C[k]) k--;//将开头存在0的情况删除