高精度除法WA了1个点!求改bug
  • 板块学术版
  • 楼主syex_WXy
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/10/23 22:53
  • 上次更新2024/10/24 10:29:35
查看原帖
高精度除法WA了1个点!求改bug
1399367
syex_WXy楼主2024/10/23 22:53

高精度除法,输入a,b,输出a/b以及a%b的值,输出共两行。b<a<10^10000

#include<bits/stdc++.h>
using namespace std;
const int MaxLen=10005;
struct BigInt{
	int a[MaxLen];
	int len;
	BigInt(string x="0"){
		memset(a,0,sizeof(a));
		len=x.length();
		for(int i=0;i<len;i++)
			a[len-1-i]=x[i]-'0';
		while(len>1&&a[len-1]==0)
			len--;
	}
	BigInt(long long x){
		char tmp[MaxLen];
		sprintf(tmp,"%lld",x);
		string y=tmp;
		*this=y;
	}
};
istream& operator>>(istream &is,BigInt &x){
	string s;
	is>>s;
	x=s;
	return is; 
}
ostream& operator<<(ostream &os,const BigInt &x){
	for(int i=x.len-1;i>=0;i--)
		os<<x.a[i];
	return os;
}
BigInt operator+(const BigInt &x,const BigInt &y){
	BigInt res;
	res.len=max(x.len,y.len);
	for(int i=0;i<res.len;i++)
		res.a[i]=x.a[i]+y.a[i];
	for(int i=0;i<res.len;i++){
		res.a[i+1]+=res.a[i]/10;
		res.a[i]%=10;
	}
	if(res.a[res.len])
		res.len++;
	return res;
}
BigInt operator-(const BigInt &x,const BigInt &y){
	BigInt res=x;
	for(int i=0;i<y.len;i++)
		res.a[i]-=y.a[i];
	for(int i=0;i<res.len;i++)
	if(res.a[i]<0){
		res.a[i]+=10;
		res.a[i+1]--;
	}
	while(res.len>1&&res.a[res.len-1]==0)
		res.len--;
	return res;
}
BigInt operator*(const BigInt &x,const BigInt &y){
	BigInt res;
	res.len=x.len+y.len;
	for(int i=0;i<x.len;i++)
		for(int j=0;j<y.len;j++)
			res.a[i+j]+=x.a[i]*y.a[j];
	for(int i=0;i<res.len;i++){
		res.a[i+1]+=res.a[i]/10;
		res.a[i]%=10;
	}
	while(res.len>1&&res.a[res.len-1]==0)
		res.len--;
	return res;
}
bool operator<(const BigInt &x,const BigInt &y){
	if(x.len!=y.len)return x.len<y.len;
	for(int i=x.len-1;i>=0;i--)
		if(x.a[i]!=y.a[i])
			return x.a[i]<y.a[i];
	return false;
}
pair<BigInt,BigInt> operator/(const BigInt &x,const BigInt &y){
	BigInt res,_10=10;
	res.len=x.len;
	BigInt r;
	for(int i=x.len-1;i>=0;i--){
		r=r*_10+x.a[i];
		res.a[i]=0;
		while(!(r<y)){
			r=r-y;
			res.a[i]++;
		}
		//res.a[i]=r/y;
		//r=r%y;
	}
	while(res.len>1&&res.a[res.len-1]==0)res.len--;
	pair<BigInt,BigInt> p;
	p.first=res;
	p.second=r;
	return p;
} 
int main(){
	BigInt x,y;
	cin>>x>>y;
	pair<BigInt,BigInt> z=x/y;
	cout<<z.first<<endl<<z.second<<endl;
	return 0;
}

高精度除法WA了1个点!求改bug

2024/10/23 22:53
加载中...