不用加减乘除做加法
题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号
思路:使用^ 和 & 实现加法运算,
a^b 得到的结果是未进位的值
a&b 左移一位 得到的是进位值
将两个相加就是结果(相加过程重复上述,知道没有进位为止)
代码:
int Add(int num1, int num2) { int n = num1 ^ num2; int jw = num1 & num2; int tmp = 0; while(jw) { jw <<= 1; tmp = n; n = jw ^ n; jw = jw & tmp; } return n; }
或者简化变量的写法;
public int Add(int num1,int num2) { while (num2!=0) { int temp = num1^num2; num2 = (num1&num2)<<1; num1 = temp; } return num1; }
递归写法:
int Add(int num1, int num2) { return num2 ? Add(num1^num2, (num1&num2)<<1) : num1; }