概述
主要思路
用减法表示除法,看一共能减多少次。
若一次一次的减会报超时异常。
采用类似二分的思路,让a先于b * i(int范围内最大的数)相比,若a大,则可以减去i个b,然后再将i除2;若a小于b * i则直接让i除2。直到a < b 的时候才停止。
AC代码
class Solution {
public int divide(int a, int b) {
long n = 0;
long x = a; // 一开始就转为long,防止因为溢出出现奇奇怪怪的问题
long y = b;
// 符号处理
boolean flag = false;
if (x <0 && y < 0){
x = -1*x;
y = -1*y;
}else if (x <0 && y > 0){
flag = true;
x = -1*x;
}else if (x >0 && y < 0){
flag = true;
y = -1*y;
}
//将除法转变为了减法
long i = 2147483647;
while (true){
if (y*i > x){
i = i/2;
}else{
x = x - y*i;
n = n + i;
}
if (y > x){
break;
}
}
if (flag){
n = -1*n;
}
if (n< -2147483648 || n>2147483647){
return 2147483647;
}else{
return (int) n;
}
}
}
最后
以上就是拉长指甲油为你收集整理的剑指 Offer II 001. 整数除法 (Java题解)的全部内容,希望文章能够帮你解决剑指 Offer II 001. 整数除法 (Java题解)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复