剑指48-不用加减乘除做加法
位运算
题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
解法1
使用位运算,具体的原理我就不深入了,我打算死记硬背,递归
class Solution {
public:
int Add(int num1, int num2)
{
return num2==0?num1:Add(num1^num2, (num1&num2)<<1);
}
};
解法2
使用字符指针的特点,例如计算1+2,1的字符指针的第二位为字符3,再将字符转为int
a+b
a+b=(int)&(char)a[b]
为了通过编译,还需要先转化为long,再转化为char
a+b=(int)(long)&((char*)(long)a)[b]
class Solution {
public:
int Add(int num1, int num2)
{
return (int)(long) &((char *)(long)num1)[num2];
}
};