记录编号 471890 评测结果 AAAAAAAAAA
题目名称 增强的除法问题 最终得分 100
用户昵称 GravatarJoel_12 是否通过 通过
代码语言 C++ 运行时间 0.007 s
提交时间 2017-11-06 21:27:10 内存使用 0.31 MiB
显示代码纯文本
/* 嘉 */

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
const int M=100+10,N=10000;
char s1[M],s2[M];
struct BGM {
	static const int B=500+10;
	int a[B<<1],len,f;
	BGM():len(0),f(0) { memset(a,0,sizeof(a)); }
	BGM operator = (const char *num) {
		memset(a,0,sizeof(a));
		len=strlen(num);
		for(int i=0;i<len;i++) a[i+1]=num[len-i-1]-'0';
		return *this;
	}
	BGM operator = (const int num[]) {
		memset(a,0,sizeof(a));
		len=num[0];
		for(int i=1;i<=num[0];i++) a[i]=num[num[0]-i+1];
		return *this;
	}
	BGM operator = (const int num) {
		memset(a,0,sizeof(a));
		char s[B]; sprintf(s,"%d",num);
		*this=s; return *this;
	}
	BGM(const char *s) { *this=s; }
	BGM(const int num[]) { *this=num; }
	BGM(const int num) { *this=num; }
	void prints() {
		if(!len) { printf("0\n"); return ; }
		if(f<0) printf("-");
		for(int i=len;i>=1;i--) printf("%d",a[i]);
		printf("\n");
	}
	void mod() {
		for(int i=1;i<=len;i++) a[i+1]+=a[i]/10,a[i]%=10;
		if(a[len+1]) len++;
	}
	bool operator > (const BGM & A) const {
		if(len!=A.len) return len>A.len;
		for(int i=len;i>=1;i--) if(a[i]!=A.a[i]) return a[i]>A.a[i];
		return 0;
	}
	bool operator < (const BGM & A) const { return A>*this; }
	bool operator == (const BGM & A) const { return !(*this>A||A>*this); }
	bool operator >= (const BGM & A) const { return !(A>*this); }
	bool operator <= (const BGM & A) const { return !(*this>A); }
	bool operator != (const BGM & A) const { return *this>A||A>*this; }
	BGM operator + (const BGM & A) {
		BGM c; c.len=max(len,A.len);
		for(int i=1;i<=c.len;i++) c.a[i]=a[i]+A.a[i];
		c.mod(); return c;
	}
	BGM operator - (const BGM & A) {
		BGM x,y,c; c.len=max(len,A.len);
		if(*this<A) { c.f=-1,x=A,y=*this; }
		else { x=*this,y=A; }
		for(int i=1;i<=c.len;i++) {
			if(x.a[i]<y.a[i]) x.a[i]+=10,x.a[i+1]--;
			c.a[i]=x.a[i]-y.a[i];
		}
		while(!c.a[c.len]&&c.len>1) c.len--;
		return c;
	}
	BGM operator * (const BGM & A) {
		BGM c; c.len=len+A.len-1;
		for(int i=1;i<=len;i++) for(int j=1;j<=A.len;j++)
			c.a[i+j-1]+=a[i]*A.a[j];
		while(!c.a[c.len]&&c.len>1) c.len--;
		c.mod(); return c;
	}
	BGM operator * (const int x) {
		BGM c; c.len=len;
		for(int i=1;i<=len;i++) c.a[i]=a[i]*x;
		c.mod(); return c;
	}
	BGM operator / (const BGM & A) {
		BGM x=*this; BGM c,d=1;
		if(len<A.len) return c;
		int s[A.len+1]; s[0]=A.len; for(int i=1;i<=A.len;i++) s[i]=0; s[1]=1;
		BGM y=s,z; c.len=len-A.len+1;
		for(int i=len;i>=1;i--) {
			z=z*10+y*a[i];
			while(z>=A) z=z-A,c.a[i-A.len+1]++; 
		}
		while(!c.a[c.len]&&c.len>1) c.len--;
		c.mod(); return c;
	}
};
int main() {
	freopen("div.in","r",stdin);
	freopen("div.out","w",stdout);
	scanf("%s%s",s1,s2);
	BGM a=s1,b=s2,c;
	c=a/b; c.prints();
	return 0;
}