国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

371. Sum of Two Integers(C++)

2019-11-06 07:10:32
字體:
來源:轉載
供稿:網友

題目:

Calculate the sum of two integers a and b, but you are not allowed to use the Operator + and -. 計算兩個整數a和b的和,但不允許使用運算符+和 - 。

如果不能用加減運算,那還能有什么運算方法呢?當然了,還有親切的位運算。

解題思路:

和平時做加減法一樣,先各個位相加,然后得到的數再相加,注意:期間要考慮進位情況(有時候多次進位,比如:9999+1=10000)

二進制的兩個數相比較無非三種情況: 1———–1———–0 0———–1———–0 相加后結果: 1———–0———–0 不進位|||進位1|||不進位

a 00101 b +11100 A.先考慮1+0以及0+0不會進位的兩種情況,此時假使1+1=0(分開考慮是否進位兩種情況),則容易想到用亦或^(相同為零,不同為一)運算。設c=a^b,則: c.1 11001 B.其次考慮進位情況,1+1=10進一位,可以先使1+1=1后整個數字向左移動一位變為10,即"<<1",要使1+1=1,且0+0=0,且1+0或0+1=0的方法就是按位與&(全為一得一,其他全為零)運算。于是設d=(a&b)<<1,則: d.1 01000 //事情到這里就結束了嗎?我本來以為是的,喜洋洋的寫了個“return ((a&b)<<1)^(a^b)"就上交了,結果試了幾個數發現有對有錯了,想了下,哎呀,忘進位了,這家伙還是個循環哩。 于是就有了c.1+d.1的運算:重復上面的運算,這不挺像遞歸的嗎?讓我試試有啥需要注意的,遞歸總要做到參數對應吧。 c.2 10001 d.2 10000 c.3 00001 d.3 100000 這最后一次運算就要返回答案了 c.4 100001 d.4 00000 也就是說c對應a,d對應b,且結束的條件是b==0,于是就有了下面的代碼:

答案:

#include<iostream>using namespace std;int getSum(int a, int b){ if (b == 0) return a; int c = a^b; int d = (a&b) << 1; return getSum(c, d);}int main(){ int a, b; cin >> a >> b; cout << getSum(a, b); return 0;}

當然了也可以用for循環來解答,當符合條件的時候跳出循環(break) 也可以是while。。。

以后做題還是要細心啊


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 湛江市| 浮山县| 岳阳县| 灯塔市| 汝城县| 绍兴市| 田东县| 咸宁市| 肇东市| 张家港市| 岳阳县| 荥阳市| 江陵县| 运城市| 敦煌市| 涿州市| 肃宁县| 阳信县| 新巴尔虎左旗| 康平县| 怀化市| 瓮安县| 中阳县| 阳高县| 南澳县| 理塘县| 舟曲县| 宁陕县| 麻栗坡县| 商洛市| 秭归县| 河西区| 本溪市| 陇南市| 龙南县| 清新县| 石河子市| 临漳县| 梅河口市| 云浮市| 浠水县|