码迷,mamicode.com
首页 > 其他好文 > 详细

高精板子vector

时间:2020-04-01 00:32:56      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:using   for   clu   put   ace   std   namespace   lan   har   

#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;
}

高精板子vector

标签:using   for   clu   put   ace   std   namespace   lan   har   

原文地址:https://www.cnblogs.com/ztz-cpp/p/12609724.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!