29. Divide Two Integers
来源:互联网 发布:大学生防网络诈骗 编辑:程序博客网 时间:2024/06/03 22:42
1.题目
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
2.分析
这道题,主要数的处理,以及int数边界操作处理。
3.解题
public int divide(int dividend, int divisor) { int max = Integer.MAX_VALUE; int min = Integer.MIN_VALUE; // 边界处理 if(divisor==0||dividend>max||dividend<min||divisor>max||divisor<min){ return max; } long one = Math.abs((long)dividend); long two = Math.abs((long)divisor); int flag = 1; if(one<two||two==0){ return 0; } if(dividend>0&&divisor<0){ flag = -1; } if(dividend<0&&divisor>0){ flag = -1; } long result = dividehelper(one,two); if(result>max){ if(flag==-1){ return min; }else{ return max; } } return (int)(flag*result);}public long dividehelper(long one,long two){ if(one<two){ return 0; } long sum = two; long count = 1; while((sum+sum)<=one){ sum += sum; count += count; } return count+dividehelper(one-sum,two);}
4.总结
这道题思路不难想到,但是在累加计数时,如果处理不当,会超时,这时候,如果联想到2的幂运算就知道,累加效率随着递增累加,效率越高,这时候就不会出现被除数绝对值远远大于除数绝对值,累加计数超时。
阅读全文
0 0
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 图的遍历
- 729. My Calendar I
- MySQL之权限管理
- 选择排序
- blob大文件切片及上传
- 29. Divide Two Integers
- k、M、G、T 硬盘单位-简单说
- Kettle数据流中空字符串和NULL值
- Ant之build.xml配置详解
- 移动端并发编程基础篇
- thinkphp 微信授权登录 以及微信实现分享
- 编程之路小细节-数组和集合作为参数的查询
- linux 文件操作:
- 数据库视图作用?什么时候用视图?