首页 > 代码库 > 【LeetCode】29. Divide Two Integers
【LeetCode】29. Divide Two Integers
题意:不用乘除求余运算,计算除法,溢出返回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 }
【LeetCode】29. Divide Two Integers
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。