博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode29DivideTwoIntegers--In Java
阅读量:4089 次
发布时间:2019-05-25

本文共 756 字,大约阅读时间需要 2 分钟。

主要采用的方法是:先不断通过移位操作找到divisor最接近dividend的倍数,如被除数是100,除数是3的话,这个倍数就是32。

然后用100减去3的32倍,这里的32倍是通过左移产生,并没有用到乘法。

这时,再用一个循环找到3的多少倍最接近于100和它32倍的差,即找到最接近于4的倍数,通过不断试探16倍,8倍,4倍。。。(通过右移),结果是1倍,为3。

再重复做差的动作,去找最接近1的3的倍数,当然是0倍。最后当做差的值小于3的一倍时,循环退出。

为了解决溢出的问题,参考了的方法,用long来进行运算,最后判定不溢出时再转换为int。

public int divide(int dividend, int divisor) {		long m = dividend;		long n = divisor;		long absn = Math.abs(n);		if(divisor==0){			return Integer.MAX_VALUE;		}		if(dividend==0){			return 0;		}				boolean flag1 = dividend<0?true:false;		boolean flag2 = divisor<0?true:false;		m = Math.abs(m);		n = Math.abs(n);		if(m
>1; ct = ct>>1; while(m
>1; ct = ct>>1; } if(n
Integer.MAX_VALUE) return Integer.MAX_VALUE; return (int)tempresult; }

转载地址:http://tfdii.baihongyu.com/

你可能感兴趣的文章
单链表的修改和删除
查看>>
C++的三个基本特征:封装、继承、多态
查看>>
C++虚函数的总结
查看>>
什么是URL地址?
查看>>
C++多态的实现方式总结
查看>>
学习C++需要注意的问题
查看>>
C++模板
查看>>
C++双冒号(::)的用法
查看>>
【Unity】封装SQLite管理类
查看>>
【Unity】面试题整理
查看>>
【C#】如何实现一个迭代器
查看>>
【Unity】Destroy和DestroyImmediate的区别
查看>>
【Lua】Mac系统下配置SublimeText的Lua编译环境
查看>>
【C#】利用Conditional属性完成编译忽略
查看>>
【Unity】微信登录后将头像存为bytes,将bytes读取成sprite图片
查看>>
【Unity】使用GPS定位经纬度
查看>>
【UGUI/NGUI】一键换Text/Label字体
查看>>
【C#】身份证本地验证
查看>>
【Unity】坑爹的Bug
查看>>
【算法】求数组中某两个数的和为目标值
查看>>