兩個整數相除

將兩個整數相除,要求不使用乘法、除法和 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;
	}
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章