剑指Offer Ⅱ 001. 整数除法(力扣剑指Offer专项突击版——整数_1)
生活随笔
收集整理的這篇文章主要介紹了
剑指Offer Ⅱ 001. 整数除法(力扣剑指Offer专项突击版——整数_1)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目
給定兩個(gè)整數(shù) a 和 b ,求它們的除法的商 a/b ,要求不得使用乘號(hào) ‘*’、除號(hào) ‘/’ 以及求余符號(hào) ‘%’ 。
注意:
整數(shù)除法的結(jié)果應(yīng)當(dāng)截去(truncate)其小數(shù)部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
假設(shè)我們的環(huán)境只能存儲(chǔ) 32 位有符號(hào)整數(shù),其數(shù)值范圍是 [?2^31, 2^31?1]。本題中,如果除法結(jié)果溢出,則返回 2^31 ? 1
題解
由于不能用乘除法,因此考慮使用加減法/位運(yùn)算,關(guān)鍵在于越界條件的判斷與復(fù)雜度降低
int divide(int a, int b) {// 考慮用加減/位運(yùn)算計(jì)算if(a == INT_MIN && b == -1)return INT_MAX;int res = 0;// 除數(shù)如果為INT_MIN,結(jié)果必為0/1if(b == INT_MIN) return a == b ? 1 : 0;// 被除數(shù)為INT_MINif(a == INT_MIN){a += abs(b);res++;}// 判斷a,b是否同號(hào)int sign = (a > 0) ^ (b > 0) ? -1 : 1;int u_a = abs(a);int u_b = abs(b);for(int i = 31; i >= 0; --i){if((u_a >> i) >= u_b){u_a = u_a - (u_b << i);if(res > INT_MAX - (1 << i)) //結(jié)果溢出,返回INT_MINreturn INT_MIN;res += 1 << i;}}return sign == 1 ? res : -res;} 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的剑指Offer Ⅱ 001. 整数除法(力扣剑指Offer专项突击版——整数_1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计算机视觉——利用openCV与Sock
- 下一篇: 剑指Offer Ⅱ 003.二进制加法(