LeetCode第29題之Divide Two Integers

C++代碼:

#include <iostream>
#include <limits>
using namespace std;

class Solution {
public:
    int divide(int dividend, int divisor) {
        /*1. 將int轉換成long long int可以省事,例如當被除數與
             但long long int可以*/
        /*2. -2147483648爲最小的int,而最大的int爲2147483647,
             故需要先強制類型轉換爲double*/
        long long int a = abs((double)dividend);
        long long int b = abs((double)divisor);
        long long int ret = 0;
        long long int c;
        while(a>=b)
        {
        /* 3. 注意這裏c要申明爲long long int,否則有可能移位之後
              變爲0,從而形成死循環*/
            c = b;  
            for (int i=0;a>=c;++i,c<<=1)
            {
                a -= c;
                ret += 1<<i;
            }
        }
        //將dividend和divisor抑或運算,最高位即表示爲結果的符號位
        ret = ( (dividend^divisor) >> 31 )? (-ret) : ret;
        return ( (ret > INT_MAX || ret < INT_MIN)? INT_MAX : ret );
    }
};

int main()
{
    Solution s;
    int a = -2147483648;
    int b = -1;
    cout<<s.divide(a, b)<<endl;
    return 0;
}
發佈了90 篇原創文章 · 獲贊 38 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章