关于vector的高精度乘法与除法等操作
高精度
乘法
vector<int> multi(vector<int> a,vector<int> s){
int t=a.size();
vector<int> ans(t,0);
t=0;
int ta,ts;
for(int i=0;i<ans.size();i++){
if(a[i]!=0)ta=i;
if(s[i]!=0)ts=i;
}
for(int j=0;j<=ts;j++){
for(int i=0;i<=ta&&i+j<ans.size();i++){
ans[j+i]+=(s[j]*a[i]);
}
}
for(int i=0;i<ans.size();i++){
ans[i]+=t;
t=ans[i]/10;
ans[i]%=10;
}
return ans;
}
除法
vector<int> divide(vector<int> a,int s){
string ans;
int t=0;
int p=0;
int flag=0;
for(int i=a.size()-1;i>=0;i--){
t=t*10+a[i];
char o='0'+t/s;
if(o!='0'){
flag=1;
}
if(flag==1){
ans+=o;
}
t%=s;
}
reverse(all(ans));
p=a.size();
vector<int>d(p);
for(int i=0;i<ans.size();i++){
d[i]=ans[i]-'0';
}
return d;
}
取最大值
vector<int> maxl(vector<int> a,vector<int> b){
int ta,tb;
ta=tb=0;
for(int i=0;i<a.size();i++){
if(a[i]!=0)ta=i;
if(b[i]!=0)tb=i;
}
int flag=0;
if(ta>tb){
return a;
}
else{
if(ta<tb)return b;
else{
for(int i=ta;i>=0;i--){
if(a[i]==b[i]){
continue;
}
else{
if(a[i]>b[i])return a;
else return b;
}
}
return a;
}
}
}
int 转vector
vector<int> to_vector(int s,int n){
vector<int>a(n);
int i=0;
while(s){
a[i]=s%10;
i++;
s/=10;
}
return a;
}
将倒序的高精度vector输出
void printvt(vector<int>a){
int flag1=0;
for(int i=0;i<a.size();i++){
if(a[i]!=0)flag1=i;
}
for(int i=flag1;i>=0;i--){
cout<<a[i];
}
}