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.

給出兩個整數a和b, 求他們的和, 但不能使用 + 等數學運算符。

注意:你不需要從輸入流讀入數據,只需要根據aplusb的兩個參數a和b,計算他們的和並返回就行。

【題目鏈接】

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

【題目解析】

直接+沒什麼好說的,關鍵在於不用+的操作:考驗Bit Operation, 可以用按位^異或兩個操作數對應位以及carry,只是carry是1還是0需要分情況討論。求更優的解法。

位運算實現整數加法本質就是用二進制進行運算。其主要用了兩個基本表達式:x^y //執行加法,不考慮進位。(x&y)<<1 //進位操作

令x=x^y ;y=(x&y)<<1 進行迭代,每迭代一次進位操作右面就多一位0,最多需要“加數二進制位長度”次迭代就沒有進位了,此時x^y的值就是結果。

【參考答案】

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章