boolcmp(vector<int> A, vector<int> B){ //比较两个高精度数字的大小 if (A.size() != B.size()) return A.size() > B.size(); for (int i = A.size() - 1; i >= 0; i--) { if (A[i] != B[i]) return A[i] > B[i]; } returntrue; }
vector<int> sub(vector<int> A, vector<int> B){ //减法模板,具体看上文 vector<int> C; int t = 0; for (int i = 0; i < A.size(); i++) { t = A[i] - t; if (i < B.size()) t -= B[i]; C.push_back((t + 10) % 10); if (t < 0) t = 1; else t = 0; } while (C.size() > 1 && C.back() == 0) C.pop_back(); return C; }
vector<int> div(vector<int> A, vector<int> B, vector<int> &R){ //A=被减数 B=减数 R=余数 vector<int> C; //初始化答案向量 R.clear(); R.push_back(0); // 从最高位开始,逐位试商 for (int i = A.size() - 1; i >= 0; i--) { R.insert(R.begin(), A[i]); while (R.size() > 1 && R.back() == 0) R.pop_back(); // 去前导0 int q = 0; while (cmp(R, B)) { R = sub(R, B); q++; } C.push_back(q); } reverse(C.begin(), C.end()); // 答案现在是高位在前,翻转成低位在前 while (C.size() > 1 && C.back() == 0) C.pop_back(); // 去前导0 return C; }