整數(shù) a 加 b (lintcode:a-b-problem)

給出兩個(gè)整數(shù)a和b, 求他們的和, 但不能使用 + 等數(shù)學(xué)運(yùn)算符啊央。
a 和 b 都是32位整數(shù)眶诈。可以使用位運(yùn)算符瓜饥。

def aplusb(a, b):
    num_list = []
    num_list.append(a)
    num_list.append(b)
    return sum(num_list)



寫一個(gè)函數(shù)册养,求兩個(gè)正整數(shù)之和压固,不得使用 + 等數(shù)學(xué)運(yùn)算符,不得使用 sum() 函數(shù)。

def aplusb(a, b):
  sum1 = a ^ b
  carry = (a & b) << 1
  while carry:
#    other_sum = sum1 ^ carry
#    carry = (sum1 & carry) << 1
#    sum1 = other_sum
    sum1, carry = sum1 ^ carry, (sum1 & carry) << 1  #:直接賦值愧膀,不借助中間變量
  else :
    return sum1

print aplusb(11, 17)

思路和原理:

對(duì)數(shù)字做運(yùn)算谣光,除了四則運(yùn)算之外,也就只剩下位運(yùn)算了蟀悦。位運(yùn)算是針對(duì)二進(jìn)制的氧敢,所以我們用二進(jìn)制和位運(yùn)算嘗試下實(shí)現(xiàn)加法。

加法可分為同位相加和進(jìn)位浙炼。

比如 7+18唯袄,
第一步,同位相加不進(jìn)位资厉。個(gè)位上7+8等于5(不考慮進(jìn)位)蔬顾,十位上0+1等于1,最后結(jié)果是15酪我。
第二步,進(jìn)位且叁。7+8有進(jìn)位,進(jìn)位結(jié)果是10欺矫。
第三部展氓,把前面兩步結(jié)果相加,15+10=25未妹,正好等于7+18的結(jié)果。
那么接下來的問題就是嘗試用二進(jìn)制和位運(yùn)算實(shí)現(xiàn)同位相加和進(jìn)位络它。

二進(jìn)制同位相加(不考慮進(jìn)位):
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0

很明顯可以用位運(yùn)算的按位異或“^”來代替:
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0

二進(jìn)制進(jìn)位:
0 + 0 無進(jìn)位
0 + 1 無進(jìn)位
1 + 0 無進(jìn)位
1 + 1 有進(jìn)位

可以用按位與“&”來代替:
0 & 0 無進(jìn)位
0 & 1 無進(jìn)位
1 & 0 無進(jìn)位
1 & 1 有進(jìn)位

而且在位運(yùn)算中化戳,我們有"<<"用來左移位,也就是進(jìn)位扫尖。

基于以上掠廓,我們有了兩個(gè)表達(dá)式:
x^y #同位相加
(x&y)<<1 #進(jìn)位操作

把以上兩步的結(jié)果再用以上的方法相加,如此迭代狰域,當(dāng)“進(jìn)位操作”的結(jié)果為零的時(shí)候黄橘,“同位相加”的結(jié)果就是最終的結(jié)果屈溉。



lintcode 原題

資料:
位運(yùn)算實(shí)現(xiàn)加法
位操作實(shí)現(xiàn)四則運(yùn)算

20171231

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末子巾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子椰于,更是在濱河造成了極大的恐慌仪搔,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件偏陪,死亡現(xiàn)場(chǎng)離奇詭異煮嫌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)饥脑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來轩娶,“玉大人框往,你說我怎么就攤上這事⌒斫Γ” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵贤重,是天一觀的道長(zhǎng)并蝗。 經(jīng)常有香客問我秸妥,道長(zhǎng),這世上最難降的妖魔是什么键畴? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任起惕,我火速辦了婚禮,結(jié)果婚禮上惹想,老公的妹妹穿的比我還像新娘督函。我一直安慰自己,他們只是感情好草穆,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布悲柱。 她就那樣靜靜地躺著,像睡著了一般些己。 火紅的嫁衣襯著肌膚如雪嘿般。 梳的紋絲不亂的頭發(fā)上炉奴,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天瞻赶,我揣著相機(jī)與錄音,去河邊找鬼砸逊。 笑死掌逛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的篓像。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼员辩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼屈暗!你這毒婦竟也來了脂男?” 一聲冷哼從身側(cè)響起种呐,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎汁讼,沒想到半個(gè)月后阔墩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耸彪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年蝉娜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片召川。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖汉形,靈堂內(nèi)的尸體忽然破棺而出倍阐,到底是詐尸還是另有隱情,我是刑警寧澤收捣,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布罢艾,位于F島的核電站,受9級(jí)特大地震影響咐蚯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜矫膨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一侧馅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧馁痴,春花似錦肺孤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酬屉。三九已至杂靶,卻和暖如春酱鸭,著一層夾襖步出監(jiān)牢的瞬間垛吗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工蔚舀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锨络,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓礼患,卻偏偏與公主長(zhǎng)得像掠归,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子虏冻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 本文是對(duì)論文《The Z1: Architecture and Algorithms of Konrad Zuse...
    逸之閱讀 4,303評(píng)論 15 12
  • 網(wǎng)站亂碼問題我們會(huì)經(jīng)常碰到领曼,大多見于非英文的中文字符或其他字符亂碼蛮穿,而且,這類問題常常是因?yàn)榫幋a方式問題绪撵,主要原因...
    波段頂?shù)?/span>閱讀 2,842評(píng)論 1 9
  • 1 關(guān)鍵字 1.1 關(guān)鍵字的概述 Java的關(guān)鍵字對(duì)java的編譯器有特殊的意義祝蝠,他們用來表示一種數(shù)據(jù)類型,或...
    哈哈哎呦喂閱讀 646評(píng)論 0 0
  • 總計(jì)二十分鐘细溅,完全不經(jīng)過大腦的打字儡嘶,包括了標(biāo)點(diǎn)符號(hào),一共1670字蹦狂。 預(yù)計(jì)一個(gè)小時(shí)可以打字6000+朋贬,需要整整七個(gè)...
    吳松乾閱讀 217評(píng)論 0 0
  • 你說窜骄,你忍受不了水的冷漠 你說,你向往沸騰的生活 火邻遏,撲撲的響 油,滋滋的叫 你奮不顧身往里跳 雖有掙扎 但逃脫不...
    清風(fēng)徐來的碎碎念閱讀 176評(píng)論 1 1