zoukankan      html  css  js  c++  java
  • 高精度加减乘除

          高精度的运算主要依靠动态数组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;
    }
  • 相关阅读:
    [leetcode] Copy List with Random Pointer
    [leetcode] Single Number II
    团队项目NABCD模型的需求分析
    团队项目的分工及绩效评估方法
    软件工程结对作业实验报告
    Java jdbc链接 mySQL 写的crud
    从高版本JDK换成低版本JDK报错Unsupported major.minor version 52.0的解决方案
    红黑树简介
    再学HTML之一
    Java script 的dom编程
  • 原文地址:https://www.cnblogs.com/lr599909928/p/12221351.html
Copyright © 2011-2022 走看看