leetcode-29 Divide Two Integers
2015-09-16 19:24
405 查看
问题描述:
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
问题分析:
转化为位运算与加减法相结合;
注意处理Integer.MIN_VALUE (-2147483648)的特殊情况,此时应当返回Integer.MAX_VALUE(2147483647)
代码:
public class Solution {
public int divide(int dividend, int divisor) {
// 处理特殊情况
if(divisor == 1)
return dividend;
if(dividend == Integer.MIN_VALUE && Math.abs(divisor)== 1)
return Integer.MAX_VALUE;
// 判断结果的符号
int sign = (dividend > 0 ^ divisor > 0) ?-1 : 1;
long ans = 0;
long end = Math.abs((long)dividend);
long sor = Math.abs((long)divisor);
// 实现除法的核心
while(end >= sor) {
long temp = sor;
long power = 1;
while((temp << 1) < end) {
power <<= 1;
temp <<= 1;
}
ans += power;
end -= temp;
}
return (int)(sign * ans);
}
}
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
问题分析:
转化为位运算与加减法相结合;
注意处理Integer.MIN_VALUE (-2147483648)的特殊情况,此时应当返回Integer.MAX_VALUE(2147483647)
代码:
public class Solution {
public int divide(int dividend, int divisor) {
// 处理特殊情况
if(divisor == 1)
return dividend;
if(dividend == Integer.MIN_VALUE && Math.abs(divisor)== 1)
return Integer.MAX_VALUE;
// 判断结果的符号
int sign = (dividend > 0 ^ divisor > 0) ?-1 : 1;
long ans = 0;
long end = Math.abs((long)dividend);
long sor = Math.abs((long)divisor);
// 实现除法的核心
while(end >= sor) {
long temp = sor;
long power = 1;
while((temp << 1) < end) {
power <<= 1;
temp <<= 1;
}
ans += power;
end -= temp;
}
return (int)(sign * ans);
}
}
相关文章推荐
- Palette状态栏颜色提取,写的不错就分享了
- Palette状态栏颜色提取,写的不错就分享了
- My New Blog
- Palette状态栏颜色提取,写的不错就分享了
- 大数据笔记06:大数据之Hadoop的HDFS(文件的读写操作)
- git
- Android 中的 Service 全面总结
- c基础知识
- java笔记--java IO流
- -bash: ./radar.sh: /bin/sh^M: bad interpreter: 没有那个文件或目录
- 一个监听器(Listener)实现多个按钮的onclick监听
- jdbc1.0、jdbc2.0、jdbc3.0、jdbc4.0的区别
- Java创建/遍历二叉树
- linux下如何实验硬raid5
- 使用Popen时报错:OSError: [Errno 2] No such file or directory
- 复习排序-堆排序
- Jquery ajax请求导出Excel表格
- 手机号码归属地查询api接口
- 国外程序员整理的C++ 资源大全
- 二分查找-递归和非递归