将两个整数相除,要求不使用乘法、除法和 mod 运算符。
样例:
给定被除数 = 100 ,除数 = 9,返回 11。
思想:
利用位操作来扩大除数的值,被除数不断减去除数,直至被除数小于除数。
#ifndef C414_H
#define C414_H
#include<iostream>
using namespace std;
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 0;
if (dividend == INT_MIN)
{
if (divisor == -1)
return INT_MAX;
if (divisor == 1)
return INT_MIN;
}
int flag = -1;
if ((dividend > 0 && divisor > 0) || (dividend < 0 && divisor < 0))
{
flag = 1;
}
long long n_dend = abs((long long)dividend);
long long n_sor = abs((long long)divisor);
long long n_num = 0;
while (n_dend >= n_sor)
{
long long l_temp = n_sor;
long long cnt = 1;
while (n_dend >= l_temp)
{
n_dend -= l_temp;
n_num += cnt;
cnt = cnt << 1;
l_temp = l_temp << 1;
}
}
return (int)n_num*flag;
}
};
#endif