题目
给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和。
示例 1:
输入:a = 1, b = 2
输出:3
示例 2:
输入:a = 2, b = 3
输出:5
提示:
-1000 <= a, b <= 1000
代码
package leetcodeday1;
public class leetcode371 {
// 投机取巧
// public int getSum(int a, int b) {
// double x = Math.pow(10, a);
// double y = Math.pow(10, b);
//
// return (int) Math.log10(x * y);
// }
/**
* 通过& 我们可以知道两数相加后需要进位的部分,进位后为x
* 通过^ 我们可以找到两数相加后不需要进位的部分,相加为y
*
* 这样我就将a+b转换为了x+y,重复上述操作,直到无须进位
* @param a
* @param b
* @return
*/
public int getSum(int a, int b) {
// 找出需要进位的点
while ((a & b) != 0){
// 进位
int t = (a & b) << 1;
// 找到无须进位的点相加
b = a ^ b;
a = t;
}
return a ^ b;
}
public static void main(String[] args) {
leetcode371 obj = new leetcode371();
System.out.println(obj.getSum(1, 2));
}
}
本文介绍了一种不依赖于加减运算符的整数相加技巧,利用按位操作实现,通过逐位处理并进位,适用于LeetCode第371题。代码示例展示了如何通过异或(XOR)和按位左移(<<)操作巧妙计算两整数之和。
295

被折叠的 条评论
为什么被折叠?



