LeetCode 29 Divide Two Integers (C,C++,Java,Python)

來源:互聯網
上載者:User

標籤:c   c++   java   leetcode   python   

Problem:

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

If it is overflow, return MAX_INT.

Solution:不能乘除就加減就行了,但是一個問題是加減有可能速度太慢,因此需要轉換,由於任何一個數都能表示成二進位,所以有dividend=divisor*(a*2^1 + b*2^2 + ...... + m*2^k)
所以只要計算出所有divisor*2^k,然後減去即可。
題目大意:給定兩個整數,要求不用乘除法和模數運算,計算出a/b的值,當結果越界的時候輸出INT最大值


Java原始碼(260ms):
public class Solution {    public int divide(int dividend, int divisor) {        long a,b,flag=0,sum=0;        long[] map=new long[33],times=new long[33];        if(dividend<0 && divisor<0)flag=1;        else if(dividend>0 && divisor>0)flag=1;        a=Math.abs((long)dividend);        b=Math.abs((long)divisor);        int i=0;        map[0]=b;times[0]=1;        while(map[i]<=a){            i++;            map[i]=map[i-1]+map[i-1];            times[i]=times[i-1]+times[i-1];        }        for(int j=i-1;j>=0;j--){            while(a >= map[j]){                a-=map[j];                sum+=times[j];            }        }        sum=flag==1?sum:-sum;        if(sum>Integer.MAX_VALUE || sum<Integer.MIN_VALUE)return Integer.MAX_VALUE;        return (int)sum;    }}

C語言原始碼(4ms):
long long ABS(long long a){    return a>0?a:-a;}int divide(int dividend, int divisor) {    int i=0,j,flag=0;    long long sum=0,a,b,map[33],times[33],STOP=1;    STOP=((long long)2147483647)+1;    if(divisor==0)return INT_MAX;    if(dividend==0)return 0;    if((dividend>0 && divisor>0) || (dividend<0 && divisor<0))flag=1;    a=ABS((long long)dividend);    b=ABS((long long)divisor);    map[0]=b;times[0]=1;    while(map[i] <= a && i<33){        i++;        map[i]=map[i-1]+map[i-1];        times[i]=times[i-1]+times[i-1];    }    for(j=i-1;j>=0;j--){        while(a >= map[j]){            a-=map[j];            sum+=times[j];        }    }    sum=flag?sum:-sum;    if(sum<INT_MIN || sum > INT_MAX)return INT_MAX;    return (int)sum;}

C++原始碼(24ms):
class Solution {public:    int divide(int dividend, int divisor) {        int i=0,j,flag=0;        long long sum=0,a,b,map[33],times[33],STOP=1;        STOP=STOP<<31;        if(divisor==0)return INT_MAX;        if((dividend>0 && divisor>0) || (dividend<0 && divisor<0))flag=1;        a=abs((long long)dividend);        b=abs((long long)divisor);        map[0]=b;times[0]=1;        while(map[i] <= STOP){            i++;            map[i]=map[i-1]+map[i-1];            times[i]=times[i-1]+times[i-1];        }        for(j=i-1;j>=0;j--){            while(a >= map[j]){                a-=map[j];                sum+=times[j];            }        }        sum=flag?sum:-sum;        if(sum<INT_MIN || sum > INT_MAX)return INT_MAX;        return (int)sum;    }};

Python原始碼(72ms):
class Solution:    # @param {integer} dividend    # @param {integer} divisor    # @return {integer}    def divide(self, dividend, divisor):        flag=0        if dividend>0 and divisor>0:flag=1        elif dividend<0 and divisor<0:flag=1        if dividend==0:return 0        dividend=abs(dividend)        divisor=abs(divisor)        map=[0 for i in range(33)]        times=[1 for i in range(33)]        i=0        map[0]=divisor;times[0]=1        while map[i]<=dividend:            i+=1            map[i]=map[i-1]+map[i-1]            times[i]=times[i-1]+times[i-1]        j=i-1;sum=0        while j>=0:            while map[j]<=dividend:                dividend-=map[j]                sum+=times[j]            j-=1        sum = -sum if flag==0 else sum        if sum>2147483647:return 2147483647        return sum


LeetCode 29 Divide Two Integers (C,C++,Java,Python)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.