剑指offer ------065(不用加减乘除求两个数的加法)
程序员文章站
2022-05-01 15:56:08
...
更多题目:《剑指offer》目录索引
题目描述:
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、×、÷ 四则运算符号。
思路:
- 在数学中,我们一直使用四则运算来进行求和等运算,那么在计算机中,我们可以使用位运算来进行四则运算
- 常用的有,左移(<<)代表乘2,右移(>>)代表除2
此题的解法为,将给定两个数进行异或,在使两个操作数进行按位异或,在左移1位当左移后的数为0时,即可得到答案
下面通过几个例子来体会一下过程:
代码:
#include <iostream>
using namespace std;
//使用位运算,
int Add(int num1, int num2)
{
int sum;
int num;
do
{
sum = num1^num2;
num = (num1 & num2) << 1;
num1 = sum;
num2 = num;
} while (num2 != 0);
return num1;
}
/******************测试用例**********************/
void TestResult(int num1, int num2, int expected)
{
int result = Add(num1, num2);
if (result == expected)
printf("%2d + %2d = %2d, Passed\n", num1, num2, result);
else
printf("%2d + %2d = %2d, FAILED\n", num1, num2, result);
}
int main()
{
TestResult(1, 1, 2);
TestResult(800, 188, 988);
TestResult(0, 1, 1);
TestResult(-1, 0, -1);
TestResult(-3, -5, -8);
system("pause");
return 0;
}
结果:
上一篇: 笔记56 | 管理网络的使用
下一篇: VMware虚拟机使用无线网络