摘要:前言今天是力扣打卡第天天天做遞歸做煩了,換換腦子,嘿嘿。原題不用加減乘除做加法題目描述寫一個(gè)函數(shù),求兩個(gè)整數(shù)之和,要求在函數(shù)體內(nèi)不得使用四則運(yùn)算符號(hào)。補(bǔ)碼的優(yōu)勢(shì)加法減法可以統(tǒng)一處理只有加法器。
【前言】
今天是力扣打卡第15天!
天天做遞歸做煩了,換換腦子,嘿嘿。
題目描述:
寫一個(gè)函數(shù),求兩個(gè)整數(shù)之和,要求在函數(shù)體內(nèi)不得使用 “+”、“-”、“*”、“/” 四則運(yùn)算符號(hào)。
示例:
輸入: a = 1, b = 1輸出: 2
?題解:
如果是十進(jìn)制的話,我們?nèi)绾瓮瓿杉臃ㄓ?jì)算呢?
比如99 + 111 = ?
第一步:計(jì)算進(jìn)位的數(shù)字:
1 + 9 = 10;
10 + 90 = 100;
得到進(jìn)位結(jié)果:110第二步:個(gè)、十、百位 的數(shù)字分別相加先不管進(jìn)位的問題:
個(gè)位:9 + 1 = 0
十位:9 + 1 = 0
百位:0 + 1 = 1
得到臨時(shí)結(jié)果:100第三步:相加得到結(jié)果:
100 + 110 = 210
如何用二進(jìn)制完成以上的步驟呢?
問題1: 二進(jìn)制的加法利用以上的步驟可以得到正確的結(jié)果嗎?
12 二進(jìn)制:1100
15 二進(jìn)制:1111第一步:計(jì)算進(jìn)位的數(shù)字:
0100 + 0100 = 1000
1000 + 1000= 10000
得到進(jìn)位結(jié)果:11000第二步:做不進(jìn)位加法
1100 + 1111 = 0011
得到臨時(shí)二進(jìn)制結(jié)果:0011第三步:將第一步和第二步結(jié)果相加得到答案
0011 + 11000 = 11011(十進(jìn)制:27)
就目前來看,是可以的。問題2:第一步驟不用加法如何得到相同結(jié)果?相與并且左移一位
如果相&能得到1 ,那么表示,對(duì)應(yīng)位置上的數(shù)字都是1,然后再往左移動(dòng)一位,就是步驟一?進(jìn)位得到的結(jié)果(1100 & 1111) << 1 = 11000
問題3:第二步驟不用加法如何得到相同結(jié)果?異或(俗稱不進(jìn)位加法)
異或:相同為0,相異為11100 ^ 1111 = 0011
問題4:第三步驟不用加法如何得到相同結(jié)果?其實(shí)這是個(gè)套娃
第三步不用加法實(shí)現(xiàn)最難,因?yàn)榈谌绞乔皟刹降暮停€是個(gè)加法;如果不用加法,就只能不斷調(diào)用前兩步的步驟。但是這里難想的是什么時(shí)候停下來呢?
當(dāng)不再需要進(jìn)位就代表停止了,即進(jìn)位的結(jié)果是0的時(shí)候停止
代碼執(zhí)行:
int add(int a, int b){ //因?yàn)椴辉试S用+號(hào),所以求出異或部分和進(jìn)位部分依然不能用+號(hào),所以只能循環(huán)到?jīng)]有進(jìn)位為止 while(b){ //保存進(jìn)位值,下次循環(huán)用 int c = (a & b) << 1; //保存不進(jìn)位值,下次循環(huán)用 a = a ^ b; b = c; } //如果還有進(jìn)位,再循環(huán),如果沒有,則直接輸出沒有進(jìn)位部分即可 return a;}
Q : 若數(shù)字 a?和 b 中有負(fù)數(shù),則變成了減法,如何處理?
A : 在計(jì)算機(jī)系統(tǒng)中,數(shù)值一律用 補(bǔ)碼 來表示和存儲(chǔ)。補(bǔ)碼的優(yōu)勢(shì): 加法、減法可以統(tǒng)一處理(CPU只有加法器)。因此,以上方法 同時(shí)適用于正數(shù)和負(fù)數(shù)的加法
今天是力扣打卡第15天!
我想吐槽一下,這道題在力扣上面顯示的是“簡(jiǎn)單”,但是我硬生生沒想出來怎么做,嗚嗚嗚,多虧力扣上面的大佬們,抱拳了。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/123350.html
摘要:大家簡(jiǎn)單看一下純遞歸的解法原題二叉搜索樹的范圍和解法題目描述給定二叉搜索樹的根結(jié)點(diǎn),返回值位于范圍之間的所有結(jié)點(diǎn)的值的和。 【前言】 今天是力扣打卡第11天! 感謝鐵汁們的陪伴,一起加油鴨!! 在第9天的時(shí)候?qū)戇^這道題的遞歸解題方法,其實(shí)DFS使用的解題思想就是遞歸,所以大同小異啦...
摘要:前言今天是刷題打卡第天可能有鐵汁會(huì)問,為什么變成刷好題,而不是刷了呢因?yàn)樽罱P者遇到很多經(jīng)典的筆試題,想著記錄下來,方便大家和自己學(xué)習(xí),所以今后筆者會(huì)在標(biāo)題上注明是不是力扣題。 【前言】 今天是刷題打卡第21天! 可能有鐵汁會(huì)問,為什么變成刷好題, 而不是刷LeetCode 了呢?因?yàn)?..
摘要:聲明這里只是作業(yè)上面的內(nèi)容,后續(xù)還會(huì)更新更好的方法。前言今天是刷題打卡第天蕪湖,堅(jiān)持一個(gè)月咯,蟹蟹大家的陪伴哈原題楊輝三角題目描述在屏幕上打印楊輝三角。 【聲明】 這里只是作業(yè)上面的內(nèi)容,后續(xù)還會(huì)更新更好的方法。? 【前言】? 今天是刷題打卡第30天! 蕪湖,堅(jiān)持一個(gè)月咯,蟹蟹大...
閱讀 1130·2021-11-24 09:39
閱讀 1433·2021-11-18 13:18
閱讀 2583·2021-11-15 11:38
閱讀 1897·2021-09-26 09:47
閱讀 1715·2021-09-22 15:09
閱讀 1694·2021-09-03 10:29
閱讀 1594·2019-08-29 17:28
閱讀 3018·2019-08-29 16:30