1. 程式人生 > 其它 >高精度除法模板

高精度除法模板

高精度除法模板(大 除 小)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;
}