220,109
社区成员
发帖
与我相关
我的任务
分享第一题:371. 两整数之和
^ 亦或 ----相当于 无进位的求和
& 与 ----相当于求每位的进位数
由于不能用+和-,所以要用一个位运算,给出下列的代码:
class Solution {
public int getSum(int a, int b) {
while(b != 0){
int temp = (a & b) << 1; // 两数有进位求和
a = a ^ b; //两数没有进位的求和
b = temp; // 进位给到b,继续循环
}
return a;
}
}
第二题:面试题 17.01. 不用加号的加法
这里不多赘述,和上一个一样。
class Solution {
public int add(int a, int b) {
while(b != 0){
int temp = (a & b) << 1;
a = a ^ b;
b = temp;
}
return a;
}
}
第三题:剑指 Offer 65. 不用加减乘除做加法
这里不多赘述,和上上一个一样。
class Solution {
public int add(int a, int b) {
while(b != 0){
int temp = (a & b) << 1;
a = a ^ b;
b = temp;
}
return a;
}
}
第四题:面试题 08.05. 递归乘法
这里的话,那个少我就用那个来减少,每次少一,然后加上大值。
class Solution {
public int multiply(int A, int B) {
if(A == 0 || B == 0){
return 0;
}
if(A > B){
return multiply(A, B-1) + A;
}
return multiply(A-1, B) + B;
}
}