题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路
不让用四则运算符,用位运算即可
首先看十进制是如何做的: 5+7=12,三步走
第一步:相加各位的值,不算进位,得到2。
第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果。
第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12。
因此位运算也按这个思路即可
代码
public class Solution {
public int Add(int num1,int num2) {
int a=(num1&num2)<<1;//计算进位,5+7=10,10是进位
int b=num1^num2;//相加和,不算进位,5+7=2,10属于进位被剔除
while(a!=0){//判断是否有进位,有进位让进位和相加和循环,直到无进位
num1=a;num2=b;//进位赋值给num1,相加和赋值给num2
a=(num1&num2)<<1;//计算num1和num2的进位
b=num1^num2;//计算num1和num2的相加和
}
return b;//进位为0时,返回相加和
}
}
网友评论