学习了一段时间《剑指offer》现在做了一些笔试,现在陆续把笔记上传到博客,方便自己及他人上网查看。
题目:写一个函数,求两个整数之和,要求在函数体内不得使用+,-,×,÷四则运算符号。
思路:分三步;
第一步:相加不考虑进位情况,用异或来处理
第二步:考虑进位信息,用与操作,左移一位处理
第三步:将第一步和第二部的结果相加(其实就是重复第一步,第二步),直到进位为0。
代码如下:
int Add(int num1, int num2)
{
int sum, carry;
do
{
sum = num1^num2;
carry = (num1&num2) << 1;
num1 = sum;
num2 = carry;
} while (num2 != 0);
return num1;
}
相关问题:不使用新的变量,交换两个变量的值。
假设有两个变量a,b。有两种不同的方法实现:
第一种方法:基于加减法
A=A+B;
B=A-B; (交换)
A=A-B; (交换)
第二种方法:基于异或运算
A=A^B;
B=A^B; (交换)
A=A^B; (交换)