[LeetCode]Divide Two Integer

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

思考:位运算。AC的时候真的想说一句“尼玛。。“,用unsigned int 超时,莫名其妙,折腾到半夜,百度一下改为long long过了。。我也不明白到底怎么回事,毕竟不是CS出身,哎。。太晚了,明天再看。

VC不支持long long,珍爱生命,远离VC。

class Solution {

public:

    int divide(int dividend, int divisor) {

        // IMPORTANT: Please reset any member data you declared, as

        // the same Solution instance will be reused for each test case.

        assert(divisor!=0);

		if(dividend==0) return 0;

		bool flag=true;

		if((dividend>0&&divisor<0)||(dividend<0&&divisor>0)) flag=false;

		long long c=dividend;

		long long d=divisor;

		long long a=abs(c);

		long long b=abs(d);

	    long long ret=0;

		long long count=1;

		while(a!=0)

		{

			b=abs(d);

			if(a<b) 

			{

				a=0;

				count=0;

				break;

			}

			count=1;

			while(b<a)

			{

				b<<=1;

				count<<=1;

			}	

			if(b!=a)

			{

				b>>=1;

				count>>=1;

			}

			a-=b;

			ret+=count;

		}

		return (flag)?ret:-ret;

    }

};

  

你可能感兴趣的:(LeetCode)