基础算法模板――高精度运算

匿名 (未验证) 提交于 2019-12-02 23:38:02
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40028201/article/details/91338356

基础算法模板――高精度运算

1. 高精度加法

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 < A.size(); i ++ )     {         t += A[i];         if (i < B.size()) t += B[i];         C.push_back(t % 10);         t /= 10;     }      if (t) C.push_back(t);     return C; } 

2. 高精度减法

#include <iostream> #include <vector>  using namespace std;  bool cmp(vector<int> &A, vector<int> &B) {     if (A.size() != B.size()) return A.size() > B.size();      for (int i = A.size() - 1; i >= 0; i -- )         if (A[i] != B[i])             return A[i] > B[i];      return true; }  vector<int> sub(vector<int> &A, vector<int> &B) {     vector<int> C;     for (int i = 0, t = 0; i < A.size(); i ++ )     {         t = A[i] - t;         if (i < B.size()) t -= B[i];         C.push_back((t + 10) % 10);         if (t < 0) t = 1;         else t = 0;     }      while (C.size() > 1 && C.back() == 0) C.pop_back();     return C; }  int main() {     string a, b;     vector<int> A, B;     cin >> a >> b;     for (int i = a.size() - 1; i >= 0; i -- ) A.push_back(a[i] - '0');     for (int i = b.size() - 1; i >= 0; i -- ) B.push_back(b[i] - '0');      vector<int> C;      if (cmp(A, B)) C = sub(A, B);     else C = sub(B, A), cout << '-';      for (int i = C.size() - 1; i >= 0; i -- ) cout << C[i];     cout << endl;      return 0; } 

3. 高精度乘法

#include <iostream> #include <vector>  using namespace std;  vector<int> mul(vector<int> &A, int b) {     vector<int> C;     int t = 0;     for (int i = 0; i < A.size() || t; i ++ )     {         if (i < A.size()) t += A[i] * b;         C.push_back(t % 10);         t /= 10;     }      return C; }  int main() {     string a;     int B;     vector<int> A;     cin >> a >> B;     for (int i = a.size() - 1; i >= 0; i -- ) A.push_back(a[i] - '0');      auto C = mul(A, B);      for (int i = C.size() - 1; i >= 0; i -- ) cout << C[i];     cout << endl;      return 0; } 

4. 高精度除法

#include <iostream> #include <vector> #include <algorithm>  using namespace std;  vector<int> div(vector<int> &A, int b, int &r) {     vector<int> C;     r = 0;     for (int i = A.size() - 1; i >= 0; i -- )     {         r = r * 10 + A[i];         C.push_back(r / b);         r %= b;     }     reverse(C.begin(), C.end());     while (C.size() > 1 && C.back() == 0) C.pop_back();     return C; }  int main() {     string a;     vector<int> A;      int B;     cin >> a >> B;     for (int i = a.size() - 1; i >= 0; i -- ) A.push_back(a[i] - '0');      int r;     auto C = div(A, B, r);      for (int i = C.size() - 1; i >= 0; i -- ) cout << C[i];      cout << endl << r << endl;      return 0; } 
文章来源: https://blog.csdn.net/qq_40028201/article/details/91338356
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!