高精度除法
思路:
- 高精度整数除以低精度的整数,商为C,余数为r。
- 从高位依次除以低精度整数。商(C)存在数组中,
r * 10 + 后一位
,继续除以低精度整数。一直循环结束。- 去掉前导0
步骤:
- 为了和之前的高精度加法、减法、乘法模板一致,这里也是采用倒序存储,唯一不同的点是,这里是从高位进行运算,而之前都是从低位进行运算
- 设置余数,初始值 为0,高精度整数从高位依次除以低精度整数,商(C)存在数组中,余数 r * 10 + 后一位,继续运算。
- 进行翻转(之前高精度整数 123 + 10,倒序存放在数组中,从低位运算 321 + 01。而乘法需要从高位运算,所以需要翻转一下 )
去掉前导 0
- 倒序打印
举例
代码
#include <iostream> #include <vector> #include <algorithm> using namespace std; // A / b,商是C, 余数是r vector<int> div(vector<int> &A, int b , int &r) //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(); //去掉前导0 return C; } int main() { string a; int b; cin >> a >> b; vector<int> A; for (int i = a.size() - 1; i >= 0; i --) A.push_back(a[i] - '0'); int r; //余数 auto C = div(A, b ,r); for (int i = C.size() - 1; i >= 0; i --) printf("%d", C[i]); cout << endl << r <<endl; }