zoukankan      html  css  js  c++  java
  • 整数运算(缺失)

    #include<iostream>
    #include<string>
    #include<vector>
    #include<algorithm>
    using namespace std;
    
    //整数加法
    void add(string &a,string &b){
        if(a.size()<b.size()){
            add(b,a);
            return ;
        }
        vector<int> m,n,s;
        for(int i=a.size()-1;i>=0;i--){
            m.push_back(a[i]-'0');
        }
        for(int i=b.size()-1;i>=0;i--){
            n.push_back(b[i]-'0');
        }
        int t=0;
        for(int i=0;i<m.size();i++){
            t+=m[i];
            if(i<n.size()){
                t+=n[i];
            }
            s.push_back(t%10);
            t/=10;
        }
        if(t){
           s.push_back(t);
        }
    
        for(int i=s.size()-1;i>=0;i--){
            cout<<s[i];
        }
        cout<<endl;
        return ;
    
    }
    
    //整数减法
    void sub(string &a,string &b){
        if(a.size()<b.size()||(a.size()==b.size()&&a<b)){
            cout<<"-";
            sub(b,a);
            return ;
        }
        vector<int> m,n,s;
        for(int i=a.size()-1;i>=0;i--){
            m.push_back(a[i]-'0');
        }
        while(m.back()==0&&m.size()>1){
            m.pop_back();
        }
        for(int i=b.size()-1;i>=0;i--){
            n.push_back(b[i]-'0');
        }
        while(n.back()==0&&n.size()>1){
            n.pop_back();
        }
        int t=0;
        for(int i=0;i<m.size();i++){
            t=m[i];
            if(i<n.size()){
                t-=n[i];
            }
            if(t<0){
                m[i+1]--;
                t+=10;
            }
            s.push_back(t);
        }
        while(s.back()==0&&s.size()>1){
            s.pop_back();
        }
    
        for(int i=s.size()-1;i>=0;i--){
            cout<<s[i];
        }
        cout<<endl;
        return ;
    }
    
    //整数乘法
    void mul(string &a,string &b){
         vector<int> m,n;
        for(int i=a.size()-1;i>=0;i--){
            m.push_back(a[i]-'0');
        }
        for(int i=b.size()-1;i>=0;i--){
            n.push_back(b[i]-'0');
        }
        //初始空间为m.size()+n.size() 初始值是0
        vector<int> s(m.size()+n.size(),0);
        for(int i=0;i<m.size();i++){
            for(int j=0;j<n.size();j++){
                s[i+j] += m[i]*n[j];
            }
        }
    
        int t=0;
        for(int i=0;i<s.size();i++){
            t+=s[i];
            s[i]=t%10;
            t/=10;
        }
    
        while(s.back()==0){
            s.pop_back();
        }
    
        for(int i=s.size()-1;i>=0;i--){
            cout<<s[i];
        }
        cout<<endl;
        return ;
    }
    //整数除法:大数除大数
    void div_big(string &a,string &b){
    
    
    }
    //整数除法:大数除小数
    void div_small(string &a,string &b){
    
    
    }
    
    
    int main(){
        string a,b;
        cin>>a>>b;
        add(a,b);
        sub(a,b);
        mul(a,b);
        return 0;
    }
  • 相关阅读:
    Angle Beats Gym
    MUV LUV UNLIMITED Gym
    Balanced Diet Gym
    数位dp HDU
    数位dp CodeForces
    数位dp HDU
    有依赖的背包 洛谷P1064 金明的预算方案 (不是分组背包)
    多重背包+二进制拆分 POJ1014
    单调队列优化dp 入门 洛谷P2627 修剪草坪
    01背包 + 排序 (记忆化搜索) 骄傲的商人(HDU
  • 原文地址:https://www.cnblogs.com/mzchuan/p/13628404.html
Copyright © 2011-2022 走看看