考点:本题考查发散思维能力
题目描述:
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
思路:二进制和位运算
两个二进制的相加结果是用一个异或实现的,两个二进制的进位结果是用一个与实现的。
第一步:不考虑进位对每一位相加相加,二进制每位相加就相当于各位做异或操作
0加0,1加1的结果都是0,0加1,1加0的结果都是1;
0和0,1和1的异或结果都是0,0和1,1和0的异或结果都是1
第二步:计算进位值,相当于各位做与操作,再向左移一位。
0加0,0加1,1加0都不会产生进位,只有1加1时,会向前产生一个进位
第三步重复上述两步, 各位相加 ,计算进位值。进位值为0,跳出循环。
public class Solution {
public int Add(int num1,int num2) {
if(num1 == 0){
return num2;
}
else if(num2 == 0){
return num1;
}
else{
int sum;
while(num2 != 0){ //先按位异或,在按位与运算,循环即可实现加和,直到num2为0
sum = num1 ^ num2; //按位异或运算
num2 = (num1 & num2) << 1; //按位与运算
num1 =sum;
}
return num1;
}
}
}
网友评论