高精板子vector
Posted ztz-cpp
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高精板子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(‘
‘);
return;
}
int main(){
vint x,y;
x=hread();
y=hread();
vint z=hminus(x,y);
hwrite(z);
return 0;
}
以上是关于高精板子vector的主要内容,如果未能解决你的问题,请参考以下文章