#29 Divide Two Integers

题目链接:https://leetcode.com/problems/divide-two-integers/

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

If it is overflow, return MAX_INT.

int divide(int dividend, int divisor) {if (dividend == INT_MIN && divisor == -1) //被除数为-2147483648除数为-1时,商溢出return INT_MAX;int quotient = 0;int flag = (dividend>0&&divisor>0 || dividend<0&&divisor<0) ? 1 : -1;unsigned int a = dividend > 0 ? dividend : -dividend; //无符号整数防止-2147483648取绝对值后溢出unsigned int b = divisor > 0 ? divisor : -divisor;unsigned int tmp = a;int digit = 0;//商的二进制位数while(tmp >= b) { //计算商的二进制位数++digit;tmp >>= 1;}while(digit–) { //类似除法的笔算过程,从最高位开始除算出商的各个位数上的数值unsigned int divi = b << digit;//在除数后面补0使得除被除数得到个位数quotient = (quotient << 1) + (a >= divi ? 1 : 0);//高位的商移位后要加权(左移加权2)a = a >= divi ? a – divi : a;}if(flag < 0)quotient = -quotient;return quotient;}

版权声明:本文为博主原创文章,未经博主允许不得转载。

,回首往事,日子里竟全是斑澜的光影,

#29 Divide Two Integers

相关文章:

你感兴趣的文章:

标签云: