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