我是靠谱客的博主 受伤吐司,最近开发中收集的这篇文章主要介绍029-Divide Two Integers-不用乘除取模来实现整型除法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

不用乘除取模来实现整型除法。

这题的关键在于用左移操作<<来取代乘法,每左移一位则相当于数字翻倍。保证每一轮的被除数大于除数的前提下,不断翻倍除数直到最大,倍数记录于结果,然后做差并将其记为下一轮的被除数。这里需要注意的是int类型的边界:

最小值:Integer.MIN_VALUE=-2147483648
最大值:Integer.MAX_VALUE=2147483647

比如-2147483648/-1,答案是2147483648,但是越界了,int内就会变成-2147483648。所以采取的一个操作就是将除数与被除数一起转化为长整型long,来避免越界问题。

对于一些特殊的运算情况,独立出来写if语句有助于提升程序效率,比如除数被除数相等,除数为0,除数为正负1之类的。

下面贴代码:

public class divide2 {
public static int divide(int dividend, int divisor) {
if( divisor==1 ) return dividend;
if( ( dividend == Integer.MIN_VALUE && divisor == -1 ) || divisor==0) return Integer.MAX_VALUE;
int sign = (dividend<0) ^ (divisor<0)? -1:1, result = 0;
if( Math.abs(dividend) == Math.abs(divisor) ) return sign;
long dvd = Math.abs((long)dividend), dvs = Math.abs((long)divisor);
long sub;
int subR;
while( dvd > dvs ) {
sub = dvs;
subR = 1;
while( dvd >= ( sub<<1 ) ) {
sub = sub << 1;
subR = subR << 1;
}
dvd = dvd - sub;
result = result + subR;
}
return sign * result;
    }
public static void main(String []args) {
System.out.println(divide(-2147483648,2));
}
}


最后

以上就是受伤吐司为你收集整理的029-Divide Two Integers-不用乘除取模来实现整型除法的全部内容,希望文章能够帮你解决029-Divide Two Integers-不用乘除取模来实现整型除法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部