劍指offer--不用加減乘除做加法

題目描述:寫一個函數,求兩個整數之和,要求在函數體內不得使用+、-、*、/四則運算符號。


題目思路:

1、回顧一下5+7=12的過程;

 個位得到的是2,十位進位爲10,相加得12;

如果沒有進位的時候直接就是各位相加得數;

2、那麼利用5->101,7->111;兩個按位與之後得到的是需要進位的位然後進位一位,兩個數按位異或相當於兩個數相加;然後將 按位與進位後的數與按位異或之後的數按位與直到進位爲0時,則停止進位;返回兩個數按位異或的數;

代碼實現:

int Add(int num1, int num2)
{
	while (num1 != 0)
	{
		int temp = num1^num2;  //按位異或
		num1 = (num1&num2) << 1;//按位與求出需要進位的位數同時進位
		num2 = temp;
	}
	return num2;
}
int main()
{
	cout << Add(1, 2) << endl;
	system("pause");
	return 0;
}


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