29. Divide Two Integers

来源:互联网 发布:域名价格排行榜 编辑:程序博客网 时间:2024/05/21 13:22
//这道题让我想起来辗转相除法和更相减损术哈哈//回归整体,不让用乘除法,那就只能位运算了,这道题思路很简单,关键在于//特殊例子dividend=-2147483648的时候如何处理。class Solution {public:    unsigned int dividea(unsigned int dividend,unsigned int divisor)    {        if(dividend<divisor) return 0;        int temp=divisor;        int i=1;        while(dividend-temp>temp)        {            temp=temp<<1;            i*=2;        }        return i+dividea(dividend-temp,divisor);    }    int divide(int dividend, int divisor) {        if(divisor==0) return 2147483647;        if(divisor==dividend) return 1;        if(divisor==-2147483648) return 0;        if(dividend==0) return 0;        bool flag=false;        if((dividend>0&&divisor>0)||(dividend<0&&divisor<0)) flag=true;        if(dividend<0) dividend=0-dividend;        if(divisor<0) divisor=0-divisor;        unsigned int value=dividea((unsigned int)dividend,divisor);        if(value==2147483648&&flag) return  2147483647l;        if(!flag)  value=-value;        return value;    }};
0 0
原创粉丝点击