方法一 用邏輯運算
a^b 表示a+b 中每位不進製的和,
(a&b) <<1 二進位制加法 1&1=1,把1左移以為10,1+1=10,表示a+b 所有進製;
思想是兩個數字相加中能分解成
不進製的和 + 每一位相加的進製
a+b = a^b +(a&b)<<1
如果a&b==0的時候
a+b=a^b;
負整數運算也可以,因為補碼運算,不存在減法。
所以反覆迭代,一直到所有的進製為0
long add( long a, long b)
return sum;
}
方法二
利用指標運算
只適應正整數,並且a, b ,a+b 均小於2^32-1;
看看陣列 char array[b],array[b]如何取得 資料的第b+1的位址了,相當於address(array)+b
array[b]的位址,等於 address(array)+b
如果a=address(array),這樣就可以完成加法運算
long add_address(int a,int b)
兩個數字相加
兩個數字相加 題幹 給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3...
不用if比較兩個數大小
一 問題 有兩個變數a,b,不用 if switch或者其它判斷語句,找出兩個數中間比較大的 二 解決方案 方法1 取平均值法 大的為 a b abs a b 2 小的為 a b abs a b 2 int fmax1 int a,int b 方法2 不使用abs ab時,b a 0,所以前面為a ...
不用if比較兩個數大小
大的為 a b abs a b 2 小的為 a b abs a b 2 int fmax1 int a,int b ab時,b a 0,所以前面為a a b 後面為a b,那麼結果就是a int fmax2 int a,int b 如果取 a b 餘數不為0,則說明a b 這是個好方法,不過題目說了...