• LeetCode-Divide Two Integers


    Divide two integers without using multiplication, division and mod operator.

    思路是使用人做除法时的运算式 每次取前除数长度或加1位还原成数字,做减法求出该位的商,需要注意很多特殊情况。。

    class Solution {
    public:
        //a/b
        void Sub(string& a,string& b,string&ret,long long ib,stringstream& ss){
            int i=0;
            string a1;
            bool all=false;
            bool end=false;
            if(a.length()<b.length()){
                ret[0]='0';
                ret.resize(1);
                return;
            }
            while(i<b.length()-1){
                ret[i]='0';
                i++;
            }
            while(a.length()>=b.length()){
                bool big=true;
                for(int i=0;i<b.length();i++){
                    if(a[i]<b[i]){
                        big=false;
                        break;
                    }
                    if(a[i]>b[i]){
                        break;
                    }
                }
                if(!big){
                    if(a.length()==b.length())
                    {
                        break;
                    }
                    a1=a.substr(0,b.length()+1);
                }
                else{
                    a1=a.substr(0,b.length());
                }
                ss.clear();
                ss<<a1;
                long long ia;
                ss>>ia;
                ss.clear();
                int count=0;
                while(ia>=ib){
                    ia-=ib;
                    count++;
                }
                int len=a1.length();
                if(ia==0){
                    a1="";
                    if(all)
                    for(int j=0;j<len-1;j++){
                        ret[i]='0';
                        i++;
                    }
                    all=true;
                }
                else{
                    all=false;
                    ss<<ia;
                    ss>>a1;
                    ss.clear();
                }
                ss.clear();
                string a2=a.substr(len,a.length()-len);
                a1=a1+a2;
                if(a2=="")end=true;
                if(a1!=""){
                    ss<<a1;
                    ss>>ia;
                    ss.clear();
                    ss<<ia;
                    ss>>a;
                }
                else a=a1;
                ret[i]=count+'0';
                i++;
            }
            if(!end){
                ret[i]='0';
                i++;
            }
            ret.resize(i);
        }
        int divide(int dividend, int divisor) {
            // Note: The Solution object is instantiated only once and is reused by each test case.
            if(divisor==1)return dividend;
            if(divisor==-1)return -dividend;
            if(dividend==0)return 0;
            if(divisor==0){
                if(dividend>0)return 2147493647;
                else return 0x80000000;
            }
            long long dvd=dividend,dvr=divisor;
            bool n1=false,n2=false;
            if(dvd<0){
                dvd=-dvd;
                n1=true;
            }
            if(dvr<0){
                dvr=-dvr;
                n2=true;
            }
            stringstream ss;
            string dd,dr;
            ss<<dvd;
            ss>>dd;
            ss.clear();
            ss<<dvr;
            ss>>dr;
            ss.clear();
            string result;
            result.resize(dd.length());
            Sub(dd,dr,result,dvr,ss);
            ss.clear();
            ss<<result;
            long long ret;
            ss>>ret;
            if(n1==n2){
                return (int)ret;
            }
            else{
                int ret2=-ret;
                return ret2;
            }
        }
    };
    View Code
  • 相关阅读:
    zookeeper3.5.6单机集群环境搭建
    mycat分表
    myacat分片及全局表定义
    装饰器
    函数参数,作用域
    可变,不可变,无序, 有序
    dict
    列表可变,元祖不可变
    列表操作
    字符串find
  • 原文地址:https://www.cnblogs.com/superzrx/p/3353671.html
Copyright © 2020-2023  润新知