【29】Divide Two Integers

    xiaoxiao2026-05-27  0

    Divide two integers without using multiplication, division and mod operator.

    If it is overflow, return MAX_INT.

    不能用乘除就只能用减法了,当然如果一个一个减的话显然太慢了,所以借住移位操作,每次减去一个被除数经过移位后能减的最大的数。 int divide(int dividend, int divisor) { if(divisor==0)return INT_MAX; long res=0; bool f; if(dividend<0&&divisor<0 || dividend>0&&divisor>0)f=1; else f=0; long dividends=abs((long)dividend); long divisors=abs((long)divisor); int k=0; long tmp=divisors; while(tmp<=dividends) { tmp=(tmp<<1); k++; } for(int i=k-1;i>=0;i--) { long tmp=(divisors<<i); if(tmp<=dividends){ res+=((long)1<<i); dividends-=tmp; } } if(!f)res=-res; if(res>INT_MAX)return INT_MAX; return res; }
    转载请注明原文地址: https://ju.6miu.com/read-1310131.html
    最新回复(0)