1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
class Solution {
public:
double exp[100];
int divide(int dividend, int divisor) {
return divided(dividend, divisor);
}
private:
int divided(double dividend, double divisor) {
int flag = 1;
if((dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0))
flag = -1;
if(dividend < 0) {
dividend = abs(dividend);
}
if(divisor < 0) {
divisor = abs(divisor);
}
int i = 0;
exp[i++] = divisor;
while(exp[i-1] < dividend) {
exp[i++] = exp[i-1] + exp[i-1];
}
int ans = 0;
i--;
while(i >= 0) {
if(dividend >= exp[i]) {
ans += (int)pow(2.0, i);
dividend -= exp[i];
}
else {
i--;
}
}
if(flag == -1) return ~ans + 1;
else return ans;
}
};
|