題目連接html
Divide two integers without using multiplication, division and mod operator.ide
最直觀的方法是,用被除數逐個的減去除數,直到被除數小於0。這樣作會超時。 本文地址code
那麼若是每次不單單減去1個除數,計算速度就會增長,可是題目不能使用乘法,所以不能減去k*除數,咱們能夠對除數進行左移位操做,這樣每次至關於減去2^k個除數,如何肯定k呢,只要使 (2^k)*除數 <= 當前被除數 <(2^(k+1))*除數.htm
class Solution { public: int divide(int dividend, int divisor) { unsigned int divd = dividend, divs = divisor;//使用unsigned防止-2147483648符號取反後溢出 if(divisor < 0)divs = -divs;//負數所有轉化爲正數 if(dividend < 0)divd = -divd; int res = 0; while(divd >= divs) { long long a = divs;//使用long long防止移位溢出 int i; for(i = 1; a <= divd; i++) a <<= 1; res += (1 << (i-2)); divd -= (divs << (i-2)); } return (dividend>0 ^ divisor>0) ? -res : res; } };
【版權聲明】轉載請註明出處:http://www.cnblogs.com/TenosDoIt/p/3795342.htmlblog