高精度除法模板

高精度除法模板(大 除 小)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;
}
posted @ 2022-11-29 16:30  csai_H  阅读(67)  评论(0)    收藏  举报