高精度整合-vector写法-C++
Posted iuk11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高精度整合-vector写法-C++相关的知识,希望对你有一定的参考价值。
高精度加法
#include<bits/stdc++.h>
using namespace std;
const int maxn=100010;
vector<int> x,y;
vector<int> add(vector<int>& a,vector<int>& b){
if(a.size()<b.size()) return add(b,a);
vector<int> c;
int t=0;
for(int i=0;i<(int)a.size();i++){
t+=a[i];
if(i<(int)b.size()) t+=b[i];
c.push_back(t%10);
t/=10;
}
if(t) c.push_back(t);
return c;
}
int main(){
string xx,yy;
cin>>xx>>yy;
reverse(xx.begin(),xx.end());
reverse(yy.begin(),yy.end());
for(int i=0;i<xx.size();i++){
x.push_back(xx[i]-'0');
}
for(int i=0;i<yy.size();i++){
y.push_back(yy[i]-'0');
}
x=add(x,y);
for(int i=x.size()-1;i>=0;i--){
cout<<x[i];
}
return 0;
}
高精度减法
bool cmp(vector<int>& a, vector<int>& b){
if(a.size()!=b.size()) return a.size()>b.size();
int i=(int)a.size()-1;
while(a[i]==b[i]&&i>0) --i;
return a[i]>b[i];
}
vector<int> add(vector<int>& a,vector<int>& b){
if(cmp(b,a)){
flag=1;
return add(b,a);
}
vector<int> c;
int t=0;
for(int i=0;i<(int)a.size()||t;i++){
t+=a[i];
if(i<(int)b.size()) t-=b[i];
int p=t;
if(p<0){
p+=10;
t=-1;
}
c.push_back(p);
if(t>=0) t=0;
}
if(t) flag=1;
return c;
}
int main(){
string xx,yy;
cin>>xx>>yy;
reverse(xx.begin(),xx.end());
reverse(yy.begin(),yy.end());
for(int i=0;i<xx.size();i++){
x.push_back(xx[i]-'0');
}
for(int i=0;i<yy.size();i++){
y.push_back(yy[i]-'0');
}
x=add(x,y);
if(flag){
cout<<"-";
}
int i=x.size()-1;
for(;i>=0;i--){
if(x[i]!=0){
break;
}
}
if(i==-1) cout<<0;
for(;i>=0;i--) cout<<x[i];
return 0;
}
高精度乘法
#include<bits/stdc++.h>
using namespace std;
vector<int> mul(vector<int>& a,int b){
vector<int> c;
long long t=0;
for(int i=0;i<(int)a.size()||t;i++){
if(i<(int)a.size()) t+=1LL*a[i]*b;
c.push_back(t%10);
t/=10;
}
return c;
}
int main(){
string xx;
int y;
cin>>xx>>y;
vector<int> x;
for(int i=xx.size()-1;i>=0;i--){
x.push_back(xx[i]-'0');
}
x=mul(x,y);
int i=x.size()-1;
for(;i>=0;i--){
if(x[i]!=0) break;
}
if(i==-1) cout<<0;
for(;i>=0;i--) cout<<x[i];
return 0;
}
高精度除法
#include<bits/stdc++.h>
using namespace std;
vector<int> divv(vector<int>& a,int b,int& r){
vector<int> c;
long long t=0;
for(int i=0;i<(int)a.size();i++){
t=t*10+a[i];
if(t/b>0) c.push_back(t/b);
else c.push_back(0);
t%=b;
r=t;
}
return c;
}
int main(){
string xx;
int y,r;
cin>>xx>>y;
vector<int> x;
for(int i=0;i<xx.size();i++){
x.push_back(xx[i]-'0');
}
x=divv(x,y,r);
int i=0;
for(;i<x.size();i++){
if(x[i]!=0) break;
}
if(i==x.size()) cout<<0;
for(;i<x.size();i++) cout<<x[i];
cout<<endl<<r;
return 0;
}
以上是关于高精度整合-vector写法-C++的主要内容,如果未能解决你的问题,请参考以下文章