Lintcode1 A+B Problem solution 題解

【題目描述】

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/

【題目解析】

直接+沒什么好說(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)度”次迭代就沒有進(jìn)位了,此時(shí)x^y的值就是結(jié)果。

【參考答案】

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 【題目描述】 Follow up for Search in Rotated Sorted Array:What ...
    Krirs閱讀 180評(píng)論 0 0
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問(wèn)題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,927評(píng)論 0 33
  • 1.大數(shù)儲(chǔ)存 RSA 依賴大數(shù)運(yùn)算,目前主流RSA 算法都建立在512 到1024位的大數(shù)運(yùn)算之上。而大多數(shù)的編譯...
    DuomiLiang閱讀 2,958評(píng)論 0 0
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,740評(píng)論 18 399
  • 1 關(guān)鍵字 1.1 關(guān)鍵字的概述 Java的關(guān)鍵字對(duì)java的編譯器有特殊的意義,他們用來(lái)表示一種數(shù)據(jù)類型,或...
    哈哈哎呦喂閱讀 785評(píng)論 0 0

友情鏈接更多精彩內(nèi)容