Divide Two Integers 解答
2024-08-26 05:04:24
Question
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
Solution
dividend = divisor * quotient + remainder
而我们知道对于任何一个数可以表示为Σi * 2x 其中i为0或1。所以我们可以用加法实现乘法。
a = a + a 等同于 a = a * 2
因此我们可以通过对divisor乘以2,求出最大的x,然后继续求出第二大,第三大的x', x''..
注意到可能有溢出问题,解决方法是将要计算的所有数先转为long。
public class Solution {
public int divide(int dividend, int divisor) {
boolean negative = (dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0);
long a = Math.abs((long)dividend);
long b = Math.abs((long)divisor);
if (a < b) {
return 0;
}
long step, sum, result = 0;
while (a >= b) {
step = b;
sum = 1;
while (step + step <= a) {
step += step;
sum += sum;
}
a = a - step;
result += sum;
}
result = negative == true ? -result : result;
if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) {
return Integer.MAX_VALUE;
}
return (int)result;
}
}
最新文章
- 移动端css知识总结--字体,毛玻璃效果,input和disabled
- mysql客户端导入sql文件命令
- re正则表达式7_{}
- UVAoj 11324 - The Largest Clique(tarjan + dp)
- wen7安装oracle 11g出现";未找到文件 E:\development_tools\database\oracle\install_d\dbhome\owb\external\oc4j_applications\applications\WFMLRSVCApp.ear";
- java web 插件式开发
- Oracle 启动状态解说
- 三十项调整助力 Ubuntu 13.04 更上一层楼
- NSString 用法大全。
- jsp简单练习-简单的下拉表单
- 判断Android应用是否安装、运行
- python中字符串拆分与合并——split()、join()、strip()和replace()
- HBase Filter及对应Shell
- mybatis缓存机制
- Gym 101873I - Uberwatch - [DP]
- 1)HDFS分布式文件系统 2)HDFS核心设计 3 )HDFS体系结构
- bzoj 1798 线段树
- C语言运算符优先级及结合性
- Android/Java 中的 String, StringBuffer, StringBuilder的区别和使用
- 微软Build 2017开发者大会午夜趴