Divide Two Integers
2015-07-21 09:38
260 查看
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
任何一个数字都可以表示为num=a_0*2^0+a_1*2^1+a_2*2^2+...+a_n*2^n,
因而可以用移位模拟出发,除数就是a_0+a_1+a_2...的和。
If it is overflow, return MAX_INT.
任何一个数字都可以表示为num=a_0*2^0+a_1*2^1+a_2*2^2+...+a_n*2^n,
因而可以用移位模拟出发,除数就是a_0+a_1+a_2...的和。
public class Solution { public static int divide(int dividend, int divisor) { if(divisor==0) return Integer.MAX_VALUE; if(divisor==-1 && dividend == Integer.MIN_VALUE) return Integer.MAX_VALUE; long pDividend = Math.abs((long)dividend); long pDivisor = Math.abs((long)divisor); int result = 0; while(pDividend>=pDivisor){ //calculate number of left shifts int numShift = 0; while(pDividend>=(pDivisor<<numShift)) numShift++; //dividend minus the largest shifted divisor result += 1<<(numShift-1); pDividend -= (pDivisor<<(numShift-1)); } if((dividend>0 && divisor>0) || (dividend<0 && divisor<0)) return result; else return -result; } }
相关文章推荐
- 【暴力搜索】[UVa 11212]Editing a Book
- POJ 3270 Cow Sorting(置换环)
- 读书笔记:大小端模式对位域的影响
- POJ3696 The Luckiest number 欧拉函数应用
- C#设计模式 - 观察者模式(使用委托)
- 收藏网站
- poj 3370 Halloween treats
- 静态数据竞争检测工具之LOCKSMITH-安装和使用
- 收藏网站56
- 《深入浅出struts2》--第三章,动作与结果
- POJ 1944:Fiber Communications
- 物联网的发展前途
- spring定时器配置
- Cocoa深入学习:NSOperationQueue、NSRunLoop和线程安全
- ZOJ3690Choosing number
- hive-0.11.0安装方法详解
- SQL Server Profiler工具
- AppCanCSS背景图片的属性
- SGU 280.Trade centers(贪心)
- POJ 1944:Fiber Communications