码迷,mamicode.com
首页 > 其他好文 > 详细

高精度加减乘除

时间:2020-01-21 13:16:19      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:加法   main   int   数字   ever   高精度加法   ++   实现   ios   

      高精度的运算主要依靠动态数组vector和字符串实现对每一位数字的运算.

 

1.高精度加法

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;
vector<int> add(vector<int> A,vector<int> B){
    vector<int> C;
    int t=0;
    for(int i=0;i<A.size() || i<B.size();i++){
        if(i<A.size())   t+=A[i];
        if(i<B.size())   t+=B[i];
        C.push_back(t%10);
        t/=10;
   }
    if(t==1)   C.push_back(1);
    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=add(A,B);
   for(int i=C.size()-1;i>=0;i--){
       cout<<C[i];
   }
  return 0;

}

2.高精度减法

#include <iostream>
#include <vector>

using namespace std;
bool cmp(vector<int> A, vector<int> B){
    if (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;
        }
    } else
        return A.size() > B.size();
}
vector<int> sub(vector<int> A, vector<int> B){
      vector<int> C;
      int t=0;
    int q=0;
      for(int i=0;i<A.size();i++){
        t=A[i]-q;
        if(i<B.size())
            t=t-B[i];
        C.push_back((t+10)%10);
        if(t<0)  q=1;
        else
            q=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);

    if(cmp(A,B)){
        vector<int> C=sub(A,B);
        for(int i=C.size()-1;i>=0;i--){
            cout<<C[i];
        }
    }
    else{
       cout<<"-";
        vector<int> C=sub(B,A);
        for(int i=C.size()-1;i>=0;i--){
            cout<<C[i];
        }
    }
    return 0;
}

3.高精度乘法

#include <iostream>
#include <cstring>
#include <math.h>
#include <algorithm>
#include <cstdio>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#define ll long long
const int N = 1e6 + 10;
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!=0;i++){
        if(i<A.size()) t+=A[i]*b;
        C.push_back(t%10);
        t/=10;
    }
    return C;
}

int main() {
  ios::sync_with_stdio(false);
  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);

  vector<int> C=mul(A,b);

  for(int i=C.size()-1;i>=0;i--)
      cout<<C[i];

    return 0;
}

4.高精度除法

#include <iostream>
#include <cstring>
#include <math.h>
#include <algorithm>
#include <cstdio>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#define ll long long
const int N = 1e6 + 10;
using namespace std;
vector<int> div(vector<int> A,int b,int &r){
    r=0;
    vector<int> C;
    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() {
  ios::sync_with_stdio(false);
   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);

   int r;
   vector<int> C=div(A,b,r);

   for(int i=C.size()-1;i>=0;i--)
       cout<<C[i];
   cout<<endl<<r;
    return 0;
}

高精度加减乘除

标签:加法   main   int   数字   ever   高精度加法   ++   实现   ios   

原文地址:https://www.cnblogs.com/lr599909928/p/12221351.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!