不准访问
- 积分
- 121
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2020-1-21
- 最后登录
- 1970-1-1
|
注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
本帖最后由 zurich.hill 于 2020-9-15 01:01 编辑
第15,16行,為啥變成long就能防止overflow?
還有36-48在做什麼??
- class Solution {
-
- public int divide(int dividend, int divisor) {
- /** 1. 商是0,則返回最大值 **/
- if (divisor == 0) return Integer.MAX_VALUE;
- /** 2. 除數是INT最小值,邊界情況 **/
- if (dividend == Integer.MIN_VALUE) {
- if( divisor == -1) return Integer.MAX_VALUE;
- else if (divisor == 1) return Integer.MIN_VALUE;
- }
- /** 3. 防止overflow???why??? **/
- long divd = (long) dividend;
- long divs = (long) divisor;
- /** 4. 給正負號標誌 **/
- int sign = 1;
- /** 5. 確保正負號 **/
- if(divd < 0) {
- divd = -divd;
- sign = -sign;
- }
- if (divs < 0) {
- divs = -divs;
- sign = - sign;
- }
- /** 6. 初始化為 0 **/
- int res = 0;
- /** 7. 循環 **/
- while (divd >= divs) {
- /** 7.1 製造 shift **/
- int shift = 0;
- /** 7.2 如果(divs << shift)比 divd 小,繼續移位 **/
- while ( divd >= (divs << shift) ) { shift++; }
- /** 7.3 拿到移位后的,res值 **/
- res += ( 1 << (shift-1) );
- /** 7.4 更新divd **/
- divd -= (divs << (shift-1));
- }
- /** 8. 得出結果 **/
- return sign * res;
- }
- }
复制代码
|
上一篇: LeetCode第7題關於overflow下一篇: 211這題怎麼理解,求解
|