记录编号 474822 评测结果 AAAAAA
题目名称 增强的减法问题 最终得分 100
用户昵称 GravatarShirry 是否通过 通过
代码语言 C++ 运行时间 0.090 s
提交时间 2017-11-10 22:28:02 内存使用 0.11 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define inf (int)1e9
using namespace std;
const int maxn=10010;
const int base=10;
struct big{
	int a[1000],s;
	big(){memset(a,0,sizeof(a)),s=0;}
	big(int x){a[1]=x,s=1;}
}a,b;
big operator + (const big&a,const big&b){
	big c;
	c.s=a.s;
	int g=0;
	for(int i=1;i<=a.s;i++){
		c.a[i]=a.a[i]+b.a[i]+g;
		g=c.a[i]/base;
		c.a[i]%=base;
	}
	while(g)c.a[++c.s]=g%base,g/=base;
	return c;
}
big operator - (const big&a,const big&b){
	big c=a;
	for(int i=b.s;i>0;i--){
		c.a[i]=a.a[i]-b.a[i];
		if(c.a[i]<0)c.a[i]+=base,c.a[i+1]--;
	}
	for(int i=1;i<=c.s;i++){
		if(c.a[i]<0)c.a[i]+=base,c.a[i+1]--;
	}
	while(c.s>1&&!c.a[c.s])c.s--;
	return c;
}
big operator * (const big&a,int b){
	big c;
	c.s=a.s;
	int g=0;
	for(int i=1;i<=a.s;i++){
		c.a[i]=a.a[i]*b+g;
		g=c.a[i]/base;
		c.a[i]%=base;
	}
	while(g)c.a[++c.s]=g%base,g/=base;
	return c;
}
big operator / (const big&a,int b){
	big c=a;
	int g=0;
	for(int i=c.s;i>0;i--){
		g=g*base+c.a[i];
		c.a[i]=g/b;
		g%=b;
	}
	while(c.s>1&&!c.a[c.s])c.s--;
	return c;
}
bool operator < (const big&a,const big&b){
	if(a.s<b.s)return true;
	else if(a.s>b.s)return false;
	else{
		for(int i=a.s;i>0;i--){
			if(a.a[i]<b.a[i])return true;
			if(a.a[i]>b.a[i])return false;
		}
	}
	return false;
}
int main(){
	freopen("sub.in","r",stdin);
	freopen("sub.out","w",stdout);
	char c[100],d[100];
	cin>>c>>d;
	for(int i=strlen(c)-1;i>=0;i--)a.a[++a.s]=c[i]-'0';
	for(int i=strlen(d)-1;i>=0;i--)b.a[++b.s]=d[i]-'0';
	big ans;
	if(a<b)ans=b-a,printf("-");
	else ans=a-b;
	printf("%d",ans.a[ans.s]);
	for(int i=ans.s-1;i>=1;i--)printf("%d",ans.a[i]);
	return 0;
}