描述
描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
数据范围:两个数都满足 −10≤n≤1000
进阶:空间复杂度 O(1),时间复杂度 O(1)
示例
示例1
输入:
1,2
返回值:
3
示例2
输入:
0,0
返回值:
0
解题思路
这个题主要使用二进制位来解决问题。首先,两个数对应的二进制位有三种情况,第一种情况两个都是1,第二种情况两个有一个是1,第三种情况两个都是0;其次,二进制位遇2进1,所以有个变量m保存要不要进1;最后,有个result_val记录对应二进制位的结果,每次得到的result_val都要与ret相与,当循环结束,ret就是最终返回结果。
代码
int Add(int num1, int num2) {
// write code here
int i = 0;
//m是进制位,记录是否有1进上来
int result_val = 0, m = 0;
//返回值
int ret = 0;
for (i = 0; i < 32; i++)
{
if ((((num1 >> i) & 1) == 1) && (((num2 >> i) & 1) == 1))
{
if (m == 0)
{
m = 1;
result_val = 0;
}
else
{
result_val = 1;
}
}
else if ((((num1 >> i) & 1) == 1) || (((num2 >> i) & 1) == 1))
{
if (m == 1)
{
result_val = 0;
}
else
{
result_val = 1;
}
}
else
{
if (m == 1)
{
m = 0;
result_val = 1;
}
else
{
result_val = 0;
}
}
ret = ret | (result_val << i);
}
return ret;
}