高精度除法模板
阿新 • • 發佈:2022-11-29
高精度除法模板(大 除 小)https://www.acwing.com/problem/content/796/
注意要點:
- 商
C[0]
先存的是高位,main函式
倒著輸出,所以要reverse
- 商的結果可能存在
前導0
#include <bits/stdc++.h> using namespace std; //A / B 商是C, 餘數r vector<int> div(vector<int> &A, int b, int &r){ vector<int> C; r = 0; //餘數 for(int i = A.size() - 1; i >= 0; i--){ // i = A.size()開始,因為要從高位開始運算 r = r * 10 + A[i]; C.push_back(r / b); r %= b; } reverse(C.begin(), C.end()); //因為是把高位先push進去的 while(C.size() > 1 && C.back() == 0) C.pop_back(); //去除前導0 return C; } int main(){ string a; vector<int> A; int B; cin >> a >> B; for(int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0'); int r; vector<int> C = div(A, B, r); for(int i = C.size() - 1; i >= 0; i--) cout << C[i]; cout << endl << r << endl; return 0; }