1308:【例1.5】高精除

发布时间:2024年01月18日

C++代码示例如下

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
string sub(string s, string st2) {
	vector<int> A, B, C;
	for (int i = s.size() - 1; ~i; i--) A.push_back(s[i] - '0');
	for (int i = st2.size() - 1; ~i; i--) B.push_back(st2[i] - '0');
	int t, la = A.size(), lb = B.size();
	for (int i = 0; i < la; i++) {
		t = A[i];
		if (i < lb) t -= B[i];
		if (t < 0) t += 10, A[i + 1]--;
		C.push_back(t % 10);
	}
	string str;
	while (C.size() > 1 && !C.back()) C.pop_back();
	for (int i = C.size() - 1; ~i; i--) str += C[i] + '0';
	return str;
}
bool cmp(string s, string st2) {
	if (s.size() != st2.size())
		return s.size() > st2.size();
	for (int i = 0; i < s.size(); i++) {
		if (s[i] != st2[i])
			return s[i] > st2[i];
	}
	return true;
}
string div(string st1, string st2, vector<int>& C) {
	string s;
	for (int i = 0; i < st1.size(); i++) {
		s += st1[i];//s>st2 -> true
		int cnt = 0;
		while (cmp(s, st2) && cnt < 10) {
			s = sub(s, st2);
			cnt++;
		}
		C.push_back(cnt);
	}
	reverse(C.begin(), C.end());
	while (C.size() > 1 && !C.back()) C.pop_back();
	return s;
}
int main() {
	string st1, st2, st;
	vector<int> C;
	cin >> st1 >> st2;
	st = div(st1, st2, C);
	for (int i = C.size() - 1; ~i; i--) cout << C[i];
	cout << '\n' << st;
	return 0;
}

文章来源:https://blog.csdn.net/2302_79277225/article/details/135683201
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。