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;
    }
  • 相关阅读:
    Win10 安装GNU 编译器(gcc、g++ 和 gfortran)
    三维地图制作 数据选型 相关参考资料
    借助mapshaper的简化来修复geojson的拓扑错误
    一种改进后的turf.idw算法
    基于Geojson的点集的抽稀Js实现
    OL3-Cesium 二三维鼠标事件统一处理
    About TopoJSON
    基于 geojson数据类型面转线Transforms Polygons and MultiPolygons to LineStrings.
    数据库文档编写辅助脚本
    Extensible Messaging and Presence Protocol (XMPP): Core
  • 原文地址:https://www.cnblogs.com/mzchuan/p/13628404.html
Copyright © 2011-2022 走看看