剑指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;
}


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