比赛 防止浮躁的小练习v0.4 评测结果 AAAAAA
题目名称 增强的减法问题 最终得分 100
用户昵称 _Itachi 运行时间 0.002 s
代码语言 C++ 内存使用 0.30 MiB
提交时间 2016-10-13 19:11:49
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<cstring>
int _max(int a,int b){return a>b?a:b;}
struct _Rabit{
	#define INF 10
	int a[1005];
	void init(int x=0){
		memset(a,0,sizeof(a));
		if(x)while(x)a[++a[0]]=x%INF,x/=INF;
	}
	bool operator <  (const _Rabit &x)const{
		if(x.a[0]^a[0])return a[0]<x.a[0];
		for(int i=a[0];i;i--)
			if(a[i]^x.a[i])return a[i]<x.a[i];
		return false;
	}
	bool operator >= (const _Rabit &x)const{
		if(x.a[0]^a[0])return a[0]>=x.a[0];
		for(int i=a[0];i;i--)
			if(a[i]^x.a[i])return a[i]>=x.a[i];
		return true;
	}
	_Rabit operator + (const _Rabit &x)const{
		_Rabit res;res.init();
		res.a[0]=_max(x.a[0],a[0]);
		for(int i=1;i<=res.a[0];i++)
			res.a[i]+=a[i]+x.a[i],res.a[i+1]+=res.a[i]/INF,res.a[i]%=INF;
		if(res.a[res.a[0]+1])res.a[0]++;
		return res;
	}
	_Rabit operator - (const _Rabit &x)const{
		_Rabit res;res.init();
		res.a[0]=_max(x.a[0],a[0]);
		for(int i=1;i<=res.a[0];i++)
			res.a[i]=a[i]-x.a[i];
		for(int i=1;i<=res.a[0];i++)
			if(res.a[i]<0)res.a[i+1]--,res.a[i]+=10;
		while(!res.a[res.a[0]])res.a[0]--;
		return res;
	}
	void out(){
		while(a[0]>0&&!a[a[0]])--a[0];
		for(int i=a[0];i>0;i--)printf("%d",a[i]);
		if(a[0]<1)putchar('0');putchar('\n');
	}
	#undef INF
}a,b,c;
int main(){
	freopen("sub.in","r",stdin);freopen("sub.out","w",stdout);
	char s1[1001],s2[1001];
	scanf("%s%s",s1+1,s2+1);
	int len1=strlen(s1+1),len2=strlen(s2+1);
	for(int i=0;i<len1;i++)a.a[i+1]=s1[len1-i]-48;a.a[0]=len1;
	for(int i=0;i<len2;i++)b.a[i+1]=s2[len2-i]-48;b.a[0]=len2;
	if(a>=b)c=a-b;else putchar('-'),c=b-a;
	c.out();
}