高精度除高精度求助
  • 板块学术版
  • 楼主linxuanrui
  • 当前回复7
  • 已保存回复7
  • 发布时间2023/2/20 19:14
  • 上次更新2023/10/24 00:14:48
查看原帖
高精度除高精度求助
857323
linxuanrui楼主2023/2/20 19:14
#pragma GCC optmize(2,3,"Ofast","inline")
#include<bits/stdc++.h>
#define int long long
#define max(a,b) ((a) > (b) ? (a) : (b))
#define min(a,b) ((a) < (b) ? (a) : (b))
#define abs(a) ((a) > 0 ? (a) : 0 - (a))
#define in(a,b,c) ((a) >= (b) && (a) <= (c))
#define isint(a) (floor(a) == a)
#define endl '\n'
using namespace std;
#define mod 1000000007
int n,k;
struct large_int{
	bool neg = false;
	int a[10000];
	void clear(){
		memset(a,0,sizeof(a));
	}
	void change(string s){
		if(s.find("-") != s.npos){
			s.erase(0,1);
			neg = true;
		}
		a[0] = s.size();
		for(int i = s.size();i >= 1;i--)a[i] = s[s.size() - i] - '0';
	}
	void print(){
		if(neg)cout << "-";
		for(int i = a[0];i >= 1;i--)cout << a[i];
	}
};
bool operator >(large_int a,large_int b){
	if(a.neg ^ b.neg)return !a.neg;
	if(a.a[0] != b.a[0])return a.a[0] > b.a[0];
	for(int i = a.a[0];i >= 1;i--){
		if(a.a[i] != b.a[i])return a.a[i] > b.a[i];
	}
	return false;
}
bool operator >=(large_int a,large_int b){
	if(a.neg ^ b.neg)return !a.neg;
	if(a.a[0] != b.a[0])return a.a[0] > b.a[0];
	for(int i = a.a[0];i >= 1;i--){
		if(a.a[i] != b.a[i])return a.a[i] > b.a[i];
	}
	return true;
}
bool operator <(large_int a,large_int b){
	if(a.neg ^ b.neg)return a.neg;
	if(a.a[0] != b.a[0])return a.a[0] < b.a[0];
	for(int i = a.a[0];i >= 1;i--){
		if(a.a[i] != b.a[i])return a.a[i] < b.a[i];
	}
	return false;
}
bool operator <=(large_int a,large_int b){
	if(a.neg ^ b.neg)return a.neg;
	if(a.a[0] != b.a[0])return a.a[0] <= b.a[0];
	for(int i = a.a[0];i >= 1;i--){
		if(a.a[i] != b.a[i])return a.a[i] <= b.a[i];
	}
	return true;
}
bool operator ==(large_int a,large_int b){
	if(a.neg ^ b.neg)return false;
	for(int i = 0;i <= max(a.a[0],b.a[0]);i++){
		if(a.a[i] != b.a[i])return false;
	}
	return true;
}
bool operator !=(large_int a,large_int b){
	if(a.neg ^ b.neg)return true;
	for(int i = 0;i <= max(a.a[0],b.a[0]);i++){
		if(a.a[i] == b.a[i])return false;
	}
	return true;
}
large_int operator -(large_int a,large_int b){
	int tw = 0;
	large_int c;
	for(int i = 1; i <= max(a.a[0],b.a[0]) + 1; i++) {
		c.a[i] = (a.a[i] - b.a[i] - tw + 10) % 10;
		tw = a.a[i] - b.a[i] - tw < 0;
	}
	c.a[0] = max(a.a[0],b.a[0]) + 1;
	while(!c.a[c.a[0]] && c.a[0] > 1)c.a[0]--;
	return c;
}
large_int operator /(large_int a,large_int b){
	large_int tmp,c;
	c.clear();
	c.a[0] = a.a[0] - b.a[0] + 1;
	for(int i = c.a[0];i > 0;i--){
		memset(tmp.a,0,sizeof(tmp.a));
		for(int j = 1;j <= b.a[0];j++){
			tmp.a[i + j - 1] = a.a[i];
		}
		tmp.a[0] = a.a[0] + i - 1;
		while(a >= tmp){
			a = a - tmp;
			c.a[i]++;
		}
	}
	while(c.a[c.a[0]] == 0 && c.a[0] > 0) c.a[0]--;
	return c;
}
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	large_int a,b;
	string s,ss;
	cin >> s >> ss;
	a.change(s),b.change(ss);
	large_int c = a / b;
	c.print();
}
2023/2/20 19:14
加载中...