Leetcode-Divide Two Integers
题目描述
Divide two integers without using multiplication, division and mod operator.
AC代码
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <stdlib.h>
#include <limits.h>
using namespace std;
int divide(int dividend, int divisor)
{
if(divisor == 0)
return INT_MAX;
double a = dividend;
double b = divisor;
long long absDividend;
long long absDivisor;
//这里很蛋疼的就是用abs的时候,gcc,g++编译不通过,我去……
if(a >= 0)
absDividend = a;
else
absDividend = -a;
if(b >= 0)
absDivisor = b;
else
absDivisor = -b;
long long result = 0;
long long maxExpOf2=absDivisor;
long long curResult=1;
while(absDividend>=absDivisor)
{
while(absDividend>=(maxExpOf2<<1))
{
maxExpOf2 <<= 1;
curResult <<= 1;
}
absDividend-=maxExpOf2;
result+=curResult;
maxExpOf2=absDivisor;
curResult=1;
}
if((dividend>0&&divisor>0)||(dividend<0&&divisor<0))
return result;
else
return -result;
}
int main()
{
int dividend, divisor;
#ifndef ok
freopen("in1.in","r",stdin);
freopen("std1.out","w",stdout);
#endif
while(cin>>dividend>>divisor)
{
cout<<divide(dividend, divisor)<<endl;
}
#ifndef ok
fclose(stdin);
fclose(stdout);
#endif
return 0;
}