📜个人简介 |
⭐️个人主页:摸鱼の文酱博客主页🙋♂️
🍑博客领域:java编程基础,mysql
🍅写作风格:干货,干货,还是tmd的干货
🌸精选专栏:【Java】【mysql】 【算法刷题笔记】
🎯博主的码云gitee,平常博主写的程序代码都在里面。
🚀支持博主:点赞👍、收藏⭐、留言💬
🍭作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!
📃另类加法
🎯1.原题链接
🎯2.题目要求
给定两个int A和B。编写一个函数返回A+B的值,但不得使用+或其他算数运算符。给定两个int A和B。编写一个函数返回A+B的值,但不得使用+或其他算数运算符。
样例输入: 1,2
样例输出: 3
🎯3.基础框架
java版本的基础框架代码如下:
import java.util.*;
public class UnusualAdd {
public int addAB(int A, int B) {
// write code here
}
}
🎯4.解题思路
1. 二进制位异或运算相当于对应位相加,不考虑进位 比如: 1 ^ 1 = 0 —> 1 + 1 = 0 (当前位值
为0,进一位) 1 ^ 0 = 1 —> 1 + 0 = 1 (当前位值为1) 0 ^ 0 = 0 —> 0 + 0 = 0 (当前位值为0)
2. 二进制位与运算左移一位相当于对应位相加之后的进位 比如: 1 & 1 = 1 —> 1 + 1 = 0 (当前
位的值进一位) 1 & 0 = 0 —> 1 + 0 = 1 (当前位的值不进位) 0 & 0 = 0 —> 0 + 0 = 0 (当前位的
值不进位)
3. 两个数相加:对应二进制位相加的结果 + 进位的结果 比如:3 + 2 --> 0011 + 0010 --> 0011
^ 0010 + ((0011 & 0010) << 1) —> (0011 ^ 0010) ^ ((0011 & 0010) << 1), 当进位之后的结
果为0时,相加结束
🎯5.完整代码
import java.util.*;
public class UnusualAdd {
public int addAB(int A, int B) {
// write code here
if(B==0){
return A;
}
int sum=0;
int carray=0;
while(B!=0){
sum=A^B;
carray=(A&B)<<1;
A=sum;
B=carray;
}
return A;
}
}
🎯6.涉及算法&总结
二进制 位运算