写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
转换成二进制数来进行运算。
先计算两个数的异或运算:运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;
sum1 = num1 ^ num2;
然后再计算两个数的与运算:运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;
当产生进位时,用左移运算符 << 对其二进制结果进行左移操作。
sum2 = (num1 & num2) << 1;
当sum2不为0时,继续上面两步骤运算,直到sum2为0,然后输出sum1。
方法一:
public class Solution {
public int Add(int num1,int num2) {
int sum1, sum2;
do {
sum1 = num1 ^ num2;
sum2 = (num1 & num2) << 1;
num1 = sum1;
num2 = sum2;
}while (num2 != 0);
return num1;
}
}
方法二:
public class Solution {
public int Add(int num1,int num2) {
while (num2 != 0){
int sum = num1 ^ num2;
int end = (num1 & num2) << 1 ;
num1 = sum;
num2 = end;
}
return num1;
}
}