高精度除法 求调
查看原帖
高精度除法 求调
706737
sundyLIUXY楼主2022/8/30 13:49
#include <bits/stdc++.h>
using namespace std;

#define vi vector<int>
string a, b;
vi va, vb, vr;
bool cmp(vi &va, vi &vb)
{
	if(va.size() != vb.size()) return va.size() > vb.size();
	for(int i = va.size()-1; i >= 0; i--)
		if(va[i] != vb[i]) return va[i] > vb[i];
	return true;
}
vi sub(vi &va, vi &vb)
{
	vi vc;
	int t = 0;
	
	for(int i = 0; i < va.size(); i++)
	{
		t = va[i] - t;
		if(i < vb.size()) t -= vb[i];
		vc.push_back((t+10) % 10);
		if(t < 0) t = 1;
		else t = 0;
	}
	while(vc.size() > 1 && vc.back() == 0) vc.pop_back();
	
	return vc;
}
vi div(vi &va, vi &vb, vi &vr)
{
	vi vc;
	int j = vb.size();
	vr.assign(va.end()-j, va.end());
	while(j <= va.size())
	{
		int k = 0;
		while(cmp(vr, vb))
		{
			vi tmp = sub(vr, vb);
			vr.assign(tmp.begin(), tmp.end());
			k++;
		}
		vc.push_back(k);
		if(j < va.size()) vr.insert(vr.begin(), va[va.size()-j-1]);
		while(vr.size() > 1 && vr.back() == 0) vr.pop_back();
		j++;
	}
	reverse(vc.begin(), vc.end());
	while(vc.size() > 1 && vc.back() == 0) vc.pop_back();
	
	return vc;
}

int main()
{
	cin >> a >> b;
	for(int i = a.size()-1; i >= 0; i--) va.push_back(a[i]-'0');
	for(int i = b.size()-1; i >= 0; i--) vb.push_back(b[i]-'0');
	
	vi vc = div(va, vb, vr);
	
	for(int i = vc.size()-1; i >= 0; i--) printf("%d", vc[i]);
	printf("\n");
	for(int i = vr.size()-1; i >= 0; i--) printf("%d", vr[i]);
	
	return 0;
 } 

真是不知道这个程序错在哪,被下面这组数据hack了

2415 
71942 

这个程序会输出一个回车,然后是一行乱码????

2022/8/30 13:49
加载中...