写⼀个函数,求两个整数之和,要求在函数体内不得使⽤ + 、 - 、 * 、 / 四则运算符号。
示例1
输⼊:1,2
返回值:3
将加法分解为「无进位和」+「进位值」,循环直到进位为0
位运算加法的数学原理:
0^0=0, 0^1=1, 1^0=1, 1^1=0(进位丢失)1&1=1,其他情况都为0public class Solution {
public int add(int a, int b) {
// 循环直到进位为0
while (b != 0) {
// 计算无进位和:异或运算相当于无进位加法
// 例如:5^3=6 (101^011=110)
int sum = a ^ b;
// 计算进位值:与运算后左移1位得到进位
// 例如:(5&3)
将迭代过程转为递归调用,基础案例是进位为0
public class Solution {
public int add(int a, int b) {
// 递归终止条件:当进位为0时,直接返回无进位和
if (b == 0) {
return a;
}
// 递归过程:计算无进位和与进位值,继续递归相加
return add(a ^ b, (a & b)
递归案例:
add(2, 3)
→ add(2^3, (2&3)
import java.util.concurrent.atomic.AtomicInteger;
public class Solution {
// 方法1:使用内置的加法方法
public int add1(int a, int b) {
return Integer.sum(a, b); // 内部实现还是用+,不符合要求
}
// 方法2:使用AtomicInteger(实际开发中更不实用)
public int add2(int a, int b) {
AtomicInteger ai = new AtomicInteger(a);
return ai.addAndGet(b); // 内部使用CAS操作
}
// 方法3:使用BigDecimal(过度设计)
public int add3(int a, int b) {
// 需要创建对象,性能较差
return BigDecimal.valueOf(a)
.add(BigDecimal.valueOf(b))
.intValue();
}
}
本文来自在线网站:seven的菜鸟成长之路,作者:seven,转载请注明原文链接:www.seven97.top
登录查看全部
参与评论
手机查看
返回顶部