1、题目
https://leetcode-cn.com/problems/divide-two-integers/
2、题意
题解1:二进制
例如 100 3;
3看做二进制第一位 从低到高就为 3 6 12 24 48 96
可得100=3+96;总个数为1(2^0)+(2^5) = 33;
记录除数可以被除的最大值(100可以被除的最大值为96)然后更新res
res+=1<<i位可能为1<<31超出int范围要转换为ll;
class Solution {
public:
int divide(int dividend, int divisor) {
int sign = 1;
if(dividend<0&&divisor>=0||dividend>=0&&divisor<0) sign = -1;
long long res = 0;
vector<long long> exp;
long long a = abs(dividend),b = abs(divisor);
for(long long i = b;i<=a;i = i+i)
exp.push_back(i);
for(int i=exp.size()-1;i>=0;i--)
{
if(a>=exp[i])
{
a-=exp[i];
res+=1ll<<i; //减去第i位的个数 移31位INT会溢出;
}
}
res = res*sign;
if(res>INT_MAX||res<INT_MIN) return INT_MAX;
return res;
}
};