题意:不用乘除求余运算,计算除法,溢出返回INT_MAX。
首先考虑边界条件,什么条件下会产生溢出?只有一种情况,即返回值为INT_MAX+1的时候。
不用乘除求余怎么做?
一.利用减法。
耗时太长,如果被除数是INT_MIN,除数是1的时候,要循环-INT_MIN次
二.利用位运算
思路来自:http://blog.csdn.net/whuwangyi/article/details/40995863
代码:
1 int divide(int dividend, int divisor) { 2 int i=0; 3 long ret=0; 4 int flag=1; 5 long dividend_copy=dividend; 6 long divisor_copy=divisor; 7 if((dividend<0&&divisor>0)||(dividend>0&&divisor<0)) 8 flag=-1; 9 dividend_copy=dividend<0?((-1)*dividend_copy):dividend_copy; 10 divisor_copy=divisor<0?((-1)*divisor_copy):divisor_copy; 11 while(dividend_copy>=divisor_copy<<1){ 12 divisor_copy<<=1; 13 i++; 14 } 15 while(i>=0){ 16 if(dividend_copy>=divisor_copy){ 17 dividend_copy-=divisor_copy; 18 ret+=1<<i; 19 } 20 i--; 21 divisor_copy>>=1; 22 } 23 ret = (flag<0)?((-1)*ret):ret; 24 if(ret==INT_MAX+1) 25 return INT_MAX; 26 else 27 return (int)ret; 28 }
时间: 2024-12-02 16:25:43