【second】Divide Two Integers

考虑负数做负号运算符之后的溢出问题。

-INT_MIN int已经无法表示,溢出了,所以用long long来存

int divide(int dividend, int divisor) {
	// Note: The Solution object is instantiated only once and is reused by each test case.
	if(divisor==0)
		return 0;
	bool bNega = false;
	long long divid,divis;
	if((dividend>0&&divisor<0)||(dividend<0&&divisor>0))
		bNega = true;
	divid = abs((double)dividend);
	divis = abs((double)divisor);

	int res = 0;
	while(divid>=divis)
	{
		int cnt = 1;
		long long sum = divis;
		while(sum+sum<divid) //二分的思想
		{
			sum += sum;
			cnt += cnt;
		}
		divid -= sum;
		res += cnt;
	}

	return (bNega?-res:res);
}

  

posted @ 2013-10-22 14:45  summer_zhou  阅读(182)  评论(0)    收藏  举报