两个整数相除

将两个整数相除,要求不使用乘法、除法和 mod 运算符。

如果溢出,返回 2147483647 。

您在真实的面试中是否遇到过这个题? Yes
样例

给定被除数 = 100 ,除数 = 9,返回 11。


采用位运算,每次<<1等于*2,还要考虑到溢出的情况,int_max = 0x7FFFFFFF, int_min = 0x80000000。

class Solution {
public:
	/**
	* @param dividend the dividend
	* @param divisor the divisor
	* @return the result
	*/
	int divide(int dividend, int divisor) {
		// Write your code here
		if (divisor == 0)
			return 2147483647;
		if (dividend == 0)
			return 0;
		bool isN;
		if ((dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0))
			isN = true;
		else
			isN = false;
		long a = abs(long(divisor));
		long n = 0;
		long d = abs(long(dividend));
		while (a <= d)
		{
			long a1 = a;
			long n1 = 1;
			while (d >= a1)
			{
				d -= a1;
				n += n1;

				n1 = n1 << 1;
				a1 = a1 << 1;
			}

		}
		
		if (isN)
			n = n*-1;
			
	    if (n > 2147483647|| n < -2147483648)
			return 2147483647;

		return n;
	}
};


你可能感兴趣的:(lintcode)