將兩個整數相除,要求不使用乘法、除法和 mod 運算子。思路如果溢位,返回 2147483647 。
樣例給定被除數 = 100 ,除數 = 9,返回 11。
標籤二分法
不用乘除法和模運算求來做除法,很容易想到的乙個方法是一直做減法,然後計數,除此之外,一種更快速的方法是:
利用位運算,意思是任何乙個整數可以表示成以2的冪為底的一組基的線性組合,即 num = a_02^0 + a_12^1 + a_22^2 + … + a_n2n。基於以上這個公式以及左移一位相當於乘以2,我們先讓除數左移直到大於被除數之前得到乙個最大的基n的值,說明被除數中至少包含2n個除數,然後減去這個基數,再依次找到n-1,…,1的值。將所有的基數相加即可得到結果。
code
class solution
long long result = 0;
long long d1 = abs((long long)dividend);
long long d2 = abs((long long)divisor);
while (d1 >= d2)
}if (isneg)
if (result < int_min || result > int_max)
return result;
}};
兩個整數相除 LintCode
將兩個整數相除,要求不使用乘法 除法和 mod 運算子。樣例 給定被除數 100 除數 9,返回 11。思想 利用位操作來擴大除數的值,被除數不斷減去除數,直至被除數小於除數。ifndef c414 h define c414 h include using namespace std class ...
兩個整數交換
第乙個程式設計題是 用 c 語言寫乙個函式交換兩整數的值,不借助第三個變數。事實上這個題目一聽到就有了想法,因為以前有做過,形如 方法一 a a b b a b a a b 不過提出了最大的問題,就是兩個正數的溢位問題。這個確實是缺限,以前遇到卻沒去找它的解決方法。此時提出了強轉型別為long in...
Oracle計算兩個整數的和與這兩個整數的差與商
pl sql procedural language sql 是一種過程化語言。pl sql都是以 block 塊為基本單位,整個pl sql塊分為三部分 1 宣告 declare 2 執行 以begin開頭 3 異常處理 以exception開頭 pl sql的語法格式如下 declare 宣告部...