在剛剛做這道題的時候,開始並沒有頭緒,在看到提示使用位運算子的時候,但是對這些符號的了解不太記得,所以在網上找了一些關於位運算子的資料,歸納如下:(供日後參考)
1.「&」,二進位制中相對位數的兩個數都為1,結果才為1,否則結果為0,類似邏輯門中的與門。
2.「|」,二進位制中相對位數的
兩個數中有乙個1或都為1,結果為1,否則結果為0,類似邏輯門中的或門。
3.「~」,(單目運算子)二進位制
中相對位數的數為1時,結果為0,為0時,結果為1,
類似邏輯門中的非門。
4.「^」,二進位制
中相對位數的
兩個數不同時,結果為1,兩個數相同時結果為0,類似邏輯門中的與非門。
5.「<<」,
用來將乙個數的各二進位制位全部左移n位,右補0
,例如:11101<<2=1110100。
6.「>>」,
將乙個數的各二進位制位右移n位,移到右端的低位被捨棄,對於無符號數,高位補0
,例如:11101>>2=00111。
在思考的過程中發現,^運算和+法運算的不進製結果相同,&運算和加法運算的只進製結果類似。
第一步,相加,不進製時,如果兩個位都是0或1,則相加為0,不相同時則為1,所以用異或表示
第二步,相加,只進製,也就是說只有當兩個位都是1時才進製,其它情況不進製,所以用按位與,然後左移,因為最後一位進製為0
第三步,遞迴直到沒有位可進。
int add(int num1, int num2)
while(num2!=0);
return num1;
}
同時還可以使用遞迴函式表示
int add(int a,int b)1 兩數相加
給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...
LetCode兩數相加問題
最近開始刷letcode上的題目,在做第二個問題時遇到了感覺很有意思的問題 問題描述 給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存一位數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之...
LeetCode 1 兩數相加
給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...