高精度算法汇总-加减乘除
作者:
YMYS
,
2025-04-11 16:27:24
· 河南
,
所有人可见
,
阅读 16
#include<bits/stdc++.h>
#define int long long
#define err cout << "error" << endl
using namespace std;
const int N = 1e5 +10;
// int T;
// void solve(){
// }
//1、高精度加法
vector<int> add(vector<int> &va, vector<int> &vb){//a大b小
if(vb.size() > va.size()) return add(vb, va);
vector<int> vc;
int t = 0;
for(int i=0;i<va.size();i++){
t+=va[i];
if(i<vb.size()) t+=vb[i];
vc.push_back(t%10);
t/=10;
}
if(t) vc.push_back(t);
while(vc.back() == 0 && vc.size()>1) vc.pop_back();
return vc;
}
bool check(vector<int> va, vector<int> vb){
if(va.size() != vb.size()) return va.size()>vb.size();
for(int i=va.size()-1;i>=0;i--){
if(va[i]!=vb[i]) return va[i]>vb[i];
}
return true;
}
vector<int> sub(vector<int> &va, vector<int> &vb){
vector<int> vc;
int t = 0;
for(int i=0;i<va.size();i++){
t = va[i] - t;
if(i<vb.size()) t = t - vb[i];
vc.push_back((t+10)%10);
if(t<0) t=1;
else t=0;
}
while(vc.back() == 0 && vc.size()>1) vc.pop_back();
return vc;
}
vector<int> mul(vector<int> &va, int x){
vector<int> vc;
int t = 0;
for(int i=0;i<va.size();i++){
t += va[i]*x;
vc.push_back(t%10);
t/=10;
}
while(t){
vc.push_back(t%10);
t/=10;
}
while(vc.back() == 0 && vc.size()>1) vc.pop_back();
return vc;
}
vector<int> div(vector<int> &va, int b, int &t){
vector<int> vc;
t=0;
for(int i=va.size()-1;i>=0;i--){
t = t*10 + va[i];
vc.push_back(t/b);
t%=b;
}
reverse(vc.begin(), vc.end());
while(vc.size()>1 && vc.back()==0) vc.pop_back();
return vc;
}
void out(vector<int> x){
for(auto it = x.rbegin();it!=x.rend();it++){
cout<<*it;
}
}
signed main()
{
#ifdef ABC
freopen("D:/daily_Coding/VScode-C&C++-Coding/in.in", "r", stdin);
freopen("D:/daily_Coding/VScode-C&C++-Coding/out.out", "w", stdout);
#endif
std::ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);
string a;
int b;
int t=0;
vector<int> va;
cin>>a>>b;
for(int i=a.size()-1;i>=0;i--) va.push_back(a[i] - '0');
auto vf = div(va,b,t);
out(vf);
cout<<endl<<t<<endl;
return 0;
}