高精度

高精乘低精&高精除低精

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define il inline
#define ri register
#define pc(i) putchar(i)
using namespace std;
int n,id=1;
struct G{
	char c[10002];int o[10002],len;
	G(){len=1;} 
	il void W(const G &x){for(ri int i=len;i>=1;--i) printf("%d",x.o[i]);}
	il void C(G &x){x.len=strlen(x.c); for(ri int i=0;i<x.len;i++) x.o[x.len-i]=(x.c[i]^48);}	
};
il G operator*(G x,G y)
{
	G re;memset(re.o,0,sizeof(re.o));
	if(x.len>y.len) swap(x,y);
	for(ri int i=1;i<=x.len;++i)
	for(ri int j=1;j<=y.len;++j) re.o[j+i-1]+=y.o[j]*x.o[i];	
	for(ri int i=1;i<=x.len+y.len+1;++i) re.o[i+1]+=re.o[i]/10,re.o[i]%=10;
	for(ri int i=9999;i>=1;--i) if(re.o[i]!=0) {re.len=i;break;}
	if(!re.len) re.len=1; 
    return re;
}
il G operator/(G x,G y)
{
	G re;memset(re.o,0,sizeof(re.o));
	if(y.len>x.len) swap(y,x);int lst=0,s=0;
	for(ri int i=y.len;i>=1;--i) s=(s<<3)+(s<<1)+y.o[i];
	for(ri int i=x.len;i>=1;--i) re.o[i]=(lst*10+x.o[i])/s,lst=(x.o[i]+lst*10)%s;
	for(ri int i=9999;i>=1;--i) if(re.o[i]!=0) {re.len=i;break;}
	if(!re.len) re.len=1; 
    return re;
}
il bool operator>(const G x,const G y)
{
	if(x.len>y.len) return true;
	else if(x.len<y.len) return false;
	else  for(ri int i=1;i<=x.len;++i)
			if(x.o[i]<y.o[i]) return false;
			else if(x.o[i]>y.o[i]) return true;
	return false;	
}

  

posted @ 2022-10-15 19:18  Bertidurlah  阅读(28)  评论(1)    收藏  举报