一、算法原理
需要注意的是,最后的结果中,C中的最高位是结果的最低位,C中的最低位是结果的最高位,需要进行reverse操作。
与高精度减法一样,最后的结果仍然需要消除“前导零”。
-
从高精度数的最高位开始,将当前位(需要+上一次除法的余数 × 10)与低精度数相除,得到商和余数。商是当前位的计算结果,余数是当前位的除法运算过程中剩余的未被除尽的部分。
-
将商存储起来,并将余数作为下一位的被除数。
-
对下一位进行除法运算,依次类推,直到高精度数的所有位都被处理完毕。
-
最终得到的商即为高精度数除以低精度数的结果。
二、代码
/* A / b = C ... r, A >= 0, b > 0 */
vector<int> div(vector<int> &A, int b, int &r){
vector<int> C;
r = 0;
for(int i = A.size()-1; i >= 0; i--){
r = r * 10 + A[i];
C.push_back(r / b);
r %= b;
}
reverse(C.begin(), C.end());
while(C.size() > 1 && C.back() == 0) // 消除前导零
C.pop_back();
return C;
}