I think this solution is correct, why I get LTE?

```
int divide(int dividend, int divisor) {
if (divisor == 1)
return dividend;
if (dividend == MIN_INT && divisor == -1)
return MAX_INT;
bool sign = false;
if (dividend >= 0 ^ divisor >= 0)
sign = true;
long long end, sor;
end = abs(dividend);
sor = abs(divisor);
long long res = 0;
long long power, temp;
while (end >= sor) {
power = 1;
temp = sor;
while ((temp << 1) <= end) {
power = power << 1;
temp = temp << 1;
}
res += power;
end -= temp;
}
if (sign)
return -res;
return res;
```

}