leetcode371:Sum of Two Integers

Question:Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.

Example:

Given a = 1 and b = 2, return 3.

本題需要考慮正負數的情況。

補碼等於~a+1,負數經過這樣的運算就變爲正數。補碼和原碼的轉換是同一表達式。

異或:如果a、b兩個值不相同,則異或結果爲1。如果a、b兩個值相同,異或結果爲0。相當於沒有進位的加法。

進位的實現:(a&b)<<1.有進位則向左移動一位,就是進位加。

Note:class域作用符對於靜態成員函數可以使用類作用域運算符::。對於非靜態成員函數必須要再定義A a;再a.function().

頭文件要和主函數的CPP文件放在一起,VS裏面不能全域查找。

VS註釋快捷鍵:Ctrl+k,Ctrl+c;消除註釋快捷鍵:Ctrl+k,Ctrl+u;


#pragma once
class Add {
public:
	int getSum1(int a, int b);
	int getSum(int a, int b) {		
		if (a < 0 && b < 0)//如果是負數就執行補碼運算
            {
			a = (~a + 1);
		    b = (~b + 1);
			int neg=getSum1(a, b);
			neg = ~neg + 1;
			return neg;//補碼
		}
		else //不全是負數就執行該運算
            {
			return getSum1(a, b);
		}

	}

};
int Add::getSum1(int a, int b){
	int xorab = a^b;
	int carry = (a&b) << 1;
	while (carry) {
		xorab = a^b;
		carry = (a&b) << 1;
		a = xorab;
		b = carry;

	}
	return xorab;
}

主函數:

#include<iostream>
#include"Add.h"
using namespace std;

int main() {
	Add a;
	int sum=a.getSum(1, -2);
	cout << sum << endl;

}






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章