Divide two numbers,两数相除求商,不能用乘法,除法,取模运算
2016-06-04 16:54
537 查看
问题描述:求商,不能用乘法,除法,取模运算。
算法思路:不能用除法,那只能用减法,但是用减法,超时。可以用位移运算,每次除数左移,相当于2倍。
算法思路:不能用除法,那只能用减法,但是用减法,超时。可以用位移运算,每次除数左移,相当于2倍。
public class DividTwoIntegers { public 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 long pDivisor = Math.abs((long)divisor); int result = 0; while(pDividend >= pDivisor) { int count = 0;//记录位移 while(pDividend >= (pDivisor << count)) { count ++; } result += (1 << (count-1)); pDividend -= (pDivisor << (count-1)); } if((dividend <0 && divisor < 0) || (dividend > 0 && divisor > 0)) { return result; } else { return -result; } } public static void main(String[] args) { DividTwoIntegers dt = new DividTwoIntegers(); int a = dt.divide(10, 3); System.out.println(a); } }
相关文章推荐
- grep命令详解
- Android App的设计架构:MVC,MVP,MVVM与架构经验谈
- C++读取特定路径下文件目录及文件名称
- 第7次作业
- 实例讲解Ruby中的钩子方法及对方法调用添加钩子
- response
- 总是弹出visual studio 实时调试器 三种解决办法
- [ZZ]C++中,引用和指针的区别
- 第8次作业
- (4.1.7.1)Android点击EditText文本框之外任何地方隐藏键盘的解决办法
- CRUD是什么?
- 总是弹出visual studio 实时调试器 三种解决办法
- 使用python操作solr
- C#基础之IL
- struts的声明式异常处理
- Listview扩展ExpandableListView
- 什么是超参数
- struts的声明式异常处理
- 第六次作业
- 【55】java异常机制剖析