今日第二题,你今天掌握几道题了?上题:
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
这又是一个神奇的题目,什么符号都不允许你用。
分析:不能用四则运算符,那只能用按位操作符了。
例如: 3+6 = 9
011
+110
1001
怎么算的,其实是两个数的二进制数按位进行异或+按位进行与(到要进行左移一位,因为进位是对前面一位有影响。)
011
+ 110
异或: 101
与(进位):100 010左移之后的结果
这两个加起来就是,但是又不能用+,所以还是按照上面来操作
101
100
异或 0001
进位 1000 100左移得到
异或 1001
进位 0000
当进位为0时,则当前的异或结果就是所求的值。
代码:
public class Solution {
public int Add(int num1,int num2) {
while(num2!=0){
int temp=num1^num2;
num2=(num1&num2)<<1;
num1=temp;
}
return num1;
}
}
牛客运行通过
运行时间:17ms
运行内存:9200Kb
其实这种方法如果之前没有遇到过可能会想不到,所以要多做多练多总结。
欢迎各位互相学习和交流哦~