溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Lintcode1 A+B Problem solution 題解

發(fā)布時(shí)間:2020-07-13 14:27:41 來(lái)源:網(wǎng)絡(luò) 閱讀:335 作者:coderer 欄目:軟件技術(shù)

【題目描述】

Write a function that add two numbers A and B. You should not use + or any arithmetic operators.

Notice:There is no need to read data from standard input stream. Both parameters are given in function aplusb, you job is to calculate the sum and return it.

給出兩個(gè)整數(shù)a和b, 求他們的和, 但不能使用 + 等數(shù)學(xué)運(yùn)算符。

注意:你不需要從輸入流讀入數(shù)據(jù),只需要根據(jù)aplusb的兩個(gè)參數(shù)a和b,計(jì)算他們的和并返回就行。

【題目鏈接】

http://www.lintcode.com/en/problem/a-b-problem/

【題目解析】

直接+沒(méi)什么好說(shuō)的,關(guān)鍵在于不用+的操作:考驗(yàn)Bit Operation, 可以用按位^異或兩個(gè)操作數(shù)對(duì)應(yīng)位以及carry,只是carry是1還是0需要分情況討論。求更優(yōu)的解法。

位運(yùn)算實(shí)現(xiàn)整數(shù)加法本質(zhì)就是用二進(jìn)制進(jìn)行運(yùn)算。其主要用了兩個(gè)基本表達(dá)式:x^y //執(zhí)行加法,不考慮進(jìn)位。(x&y)<<1 //進(jìn)位操作

令x=x^y ;y=(x&y)<<1 進(jìn)行迭代,每迭代一次進(jìn)位操作右面就多一位0,最多需要“加數(shù)二進(jìn)制位長(zhǎng)度”次迭代就沒(méi)有進(jìn)位了,此時(shí)x^y的值就是結(jié)果。

【參考答案】

http://www.jiuzhang.com/solutions/a-b-problem/


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI