题目:Divide two integers without using multiplication, division and mod operator.
就是做一个除法运算不能用乘法,除法(废话),取模。
有意思的题目,我的思路就是先预处理,num存除数的倍数,sum存除数的倍数的值,从第一个比被除数小的sum开始减,并累加除数的倍数,复杂度logn。
挂了两次,第一次傻逼了忘考虑正负,第二次发现爆int了,改成long long就过了。
class Solution {
public:
int divide(int dividend, int divisor) {
int n=0,i,flag=0,num[100];
long long sum[100],d1,d2;
d1=(long long)dividend;
d2=(long long)divisor;
if(d2<0)d2=0-d2,++flag;
if(d1<0)d1=0-d1,++flag;
sum[1]=d2;
num[1]=1;
for(i=2;sum[i-1]<d1;++i)
{
sum[i]=sum[i-1]+sum[i-1];
num[i]=num[i-1]+num[i-1];
}
--i;
while(d1>=d2&&i>0)
{
while(d1>=sum[i])
{
d1-=sum[i];
n+=num[i];
}
--i;
}
if(flag&1)return -n;
else return n;
}
};