记录编号 334072 评测结果 AAAAAAAAAA
题目名称 增强的除法问题 最终得分 100
用户昵称 Gravatar面对疾风吧 疾风 疾风吧 是否通过 通过
代码语言 C++ 运行时间 0.193 s
提交时间 2016-10-31 18:47:02 内存使用 1.18 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define maxn 40000
using namespace std;
struct BigInt{
	int a[maxn],L;
	void Init(int k){
		for(int i=1;i<maxn;i++)a[i]=0;
		L=1;
		a[1]=k;
	}
}B,C,D;	
void Print(const BigInt &A){
		for(int i=A.L;i;i--)printf("%d",A.a[i]);
		printf("\n");
	}
BigInt operator + (const BigInt &X,const BigInt &Y){
	B.Init(0);
	int len=max(X.L,Y.L);
	for(int i=1;i<=len;i++){
		B.a[i]+=X.a[i]+Y.a[i];
		if(B.a[i]>=10){
			B.a[i]-=10;
			B.a[i+1]++;
		}
	}
	if(B.a[len+1])len++;
	B.L=len;
	return B;
}
BigInt operator - (const BigInt &X,const BigInt &Y){
	B.Init(0);
	for(int i=1;i<=X.L;i++){
		B.a[i]+=X.a[i]-Y.a[i];
		if(B.a[i]<0)B.a[i]+=10,B.a[i+1]--;
	}
	B.L=X.L;
	while(!B.a[B.L]&&B.L>1) B.L--;
	return B;
}
bool operator > (const BigInt &X,const BigInt &Y){
	if(X.L>Y.L)return 1;
	if(X.L<Y.L)return 0;
	for(int i=X.L;i;i--){
		if(X.a[i]==Y.a[i])continue;
		if(X.a[i]>Y.a[i])return 1;
		else return 0;
	}
	return 1;
}
BigInt operator * (const BigInt &X,const BigInt &Y){
	B.Init(0);
	for(int i=1;i<=X.L;i++){
		for(int j=1;j<=Y.L;j++){
			B.a[i+j-1]+=X.a[i]*Y.a[j];
			B.a[i+j]+=B.a[i+j-1]/10;
			B.a[i+j-1]%=10;
		}
	}
	B.L=X.L+Y.L-1;
	while(B.a[B.L+1]){
		B.L++;
		B.a[B.L+1]+=B.a[B.L]/10;
		B.a[B.L]%=10;
	}
	while(!B.a[B.L]&&B.L>1)B.L--;
	return B;
}
void Update(int k){
	for(int i=D.L+1;i>=2;i--)D.a[i]=D.a[i-1];
	D.L++;
	D.a[1]=k;
	while(!D.a[D.L]&&D.L>1)D.L--;
}
BigInt operator / (const BigInt &X,const BigInt &Y){
	C.Init(0);D.Init(0);
	for(int i=1;i<=Y.L;i++) D.a[i]=X.a[i+X.L-Y.L];
	D.L=Y.L;
	for(int i=X.L;i>=Y.L;i--){
		while(D>Y){
			C.a[i-Y.L+1]++;
			D=D-Y;
		}
		if(i>Y.L)Update(X.a[i-Y.L]);
	}
	C.L=X.L-Y.L+1;
	while(!C.a[C.L]&&C.L>1)C.L--;
	return C;
}
int len1,len2;
BigInt AA,BB;
char s1[maxn],s2[maxn];
int main(){
	freopen("div.in","r",stdin);freopen("div.out","w",stdout);
	scanf("%s%s",s1+1,s2+1);
	len1=strlen(s1+1);
	len2=strlen(s2+1);
	for(int i=1;i<=len1;i++)AA.a[i]=s1[len1-i+1]-'0';
	AA.L=len1;
	for(int i=1;i<=len2;i++)BB.a[i]=s2[len2-i+1]-'0';
	BB.L=len2;
	/*printf("len1=%d len2=%d\n",len1,len2);
	printf("AA=");Print(AA);
	printf("BB=");Print(BB);*/
	if(BB>AA){
		printf("0\n");
		getchar();getchar();
		return 0;
	}
	Print(AA/BB);
	getchar();getchar();
	return 0;
}