码迷,mamicode.com
首页 > 其他好文 > 详细

Divide Two Integers

时间:2015-06-11 18:47:48      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:

感觉这题挺容易的,就没自己做了············

直接用除数去一个一个加,直到被除数被超过的话,会超时。

解决办法每次将被除数增加1倍,同时将count也增加一倍,如果超过了被除数,那么用被除数减去当前和再继续本操作。

class Solution {
public:
    int divide(int dividend, int divisor) {
        
         if (dividend == INT_MIN && divisor == -1)
            return INT_MAX;
         if (dividend == 0 || divisor == 0)
            return 0;

        int nega = 0;
        if ((dividend>0&&divisor<0) || (dividend<0&&divisor>0))
            nega = 1;
        long long d=dividend;//int数据abs(-2147483648)会溢出,因为正数int只能到2147483647,所以需要long long 来存储一下
        long long s=divisor;
        long long den = abs(d);
        long long sor = abs(s);
        if (sor > den)
            return 0;
        long long sum = 0;
        int count = 0;
        int res = 0;
        while (den >= sor)
        {
            count = 1;                //a >= b保证了最少有一个count
            sum = sor;
            while (sum + sum <= den){    //!!
                sum += sum;
                count += count;
            }
            den -= sum;
            res += count;
        }

        if (nega)
            res = 0 - res;
        return res;
    }
};

 

Divide Two Integers

标签:

原文地址:http://www.cnblogs.com/qiaozhoulin/p/4569445.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!