高精板子vector

#include<bits/stdc++.h>
#define vint vector<int>
using namespace std;

vint hread(){
	vint r;
	string s;
	cin>>s;
	for(register int i=s.size()-1;i>=0;i--)
		r.push_back(s[i]-48);
	return r;
}

vint hplus(vint x,vint y){
	vint z(max((int)x.size(),(int)y.size())+1);
	z[0]=0;
	for(register int i=0;i<(int)z.size()-1;i++){
		if(i<(int)x.size())
			z[i]+=x[i];
		if(i<(int)y.size())
			z[i]+=y[i];
		z[i+1]=z[i]/10;
		z[i]%=10;
	}
	if((int)z.size()>1 && !z.back())
		z.pop_back();
	return z;
}

vint hmult(vint x,vint y){
	vint z((int)x.size()+(int)y.size());
	for(register int i=0;i<(int)z.size();i++)
		z[i]=0;
	for(register int i=0;i<(int)x.size();i++){
		for(register int j=0;j<(int)y.size();j++)
			z[i+j]+=x[i]*y[j];
	}
	for(register int i=0;i<(int)z.size();i++){
		z[i+1]+=z[i]/10;
		z[i]%=10;
	}
	while((int)z.size()>1 && !z.back())
		z.pop_back();
	return z;
}

vint hdiv(vint x,int y){
	vint z((int)x.size());
	for(register int i=0;i<(int)z.size();i++)
		z[i]=0;
	int si=(int)x.size();
	x.push_back(0);
	for(register int i=si-1;i>=0;i--){
		x[i]+=(x[i+1]%y)*10;
		z[i]=x[i]/y;
	}
	while((int)z.size()>1 && !z.back())
		z.pop_back();
	return z;
}

vint hmax(vint x,vint y){
	if(x.size()>y.size())
		return x;
	if(x.size()<y.size())
		return y;
	for(register int i=(int)x.size()-1;i>=0;i--){
		if(x[i]>y[i])
			return x;
		if(x[i]<y[i])
			return y;
	}
	return x;
}

vint hchange(int x){
	vint r;
	while(x){
		r.push_back(x%10);
		x/=10;
	}
	return r;
}

vint hminus(vint x,vint y){
	vint z(max((int)x.size(),(int)y.size())+1);
	for(register int i=0;i<(int)z.size()-1;i++){
		if(i<(int)x.size())
			z[i]+=x[i];
		if(i<(int)y.size())
			z[i]-=y[i];
		if(z[i]<0){
			z[i]+=10;
			z[i+1]--;
		}
	}
	while((int)z.size()>1 && !z.back())
		z.pop_back();
	return z;
}

void hwrite(vint x){
	if(x.back()==-1){
		putchar('-');
		x.pop_back();
		vint a,b;
		for(register int i=0;i<(int)x.size();i++)
			a.push_back(x[i]);
		for(register int i=0;i<(int)x.size();i++)
			b.push_back(0);
		b.push_back(1);
		x=hminus(b,a);
	}
	for(register int i=x.size()-1;i>=0;i--)
		putchar(x[i]+48);
	putchar('\n');
	return;
}

int main(){
	vint x,y;
	x=hread();
	y=hread();
	vint z=hminus(x,y);
	hwrite(z);
	return 0;
}
posted @ 2020-03-31 23:53  ztz_cpp  阅读(106)  评论(0编辑  收藏  举报