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;
    }
  • 相关阅读:
    1052 Linked List Sorting (25 分)
    1051 Pop Sequence (25 分)
    1050 String Subtraction (20 分)
    1049 Counting Ones (30 分)
    1048 Find Coins (25 分)
    1047 Student List for Course (25 分)
    1046 Shortest Distance (20 分)
    1045 Favorite Color Stripe (30 分)
    1044 Shopping in Mars (25 分)
    1055 The World's Richest (25 分)
  • 原文地址:https://www.cnblogs.com/mzchuan/p/13628404.html
Copyright © 2011-2022 走看看