lintcode 414 兩個整數相除

2022-03-29 14:14:45 字數 704 閱讀 7391

將兩個整數相除,要求不使用乘法、除法和 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 宣告部...