题目一
1.题目
题目链接:另类加法
2.思路
通过位运算实现,具体实现如下:
- 二进制位异或运算相当于对应位相加,不考虑进位 比如: 1 ^ 1 = 0 —> 1 + 1 = 0 (当前位值
为0,进一位) 1 ^ 0 = 1 —> 1 + 0 = 1 (当前位值为1) 0 ^ 0 = 0 —> 0 + 0 = 0 (当前位值为0) - 二进制位与运算左移一位相当于对应位相加之后的进位 比如: 1 & 1 = 1 —> 1 + 1 = 0 (当前
位的值进一位) 1 & 0 = 0 —> 1 + 0 = 1 (当前位的值不进位) 0 & 0 = 0 —> 0 + 0 = 0 (当前位的
值不进位) - 两个数相加:对应二进制位相加的结果 + 进位的结果 比如:3 + 2 --> 0011 + 0010 --> 0011
^ 0010 + ((0011 & 0010) << 1) —> (0011 ^ 0010) ^ ((0011 & 0010) << 1), 当进位之后的结
果为0时,相加结束
3.代码实现
import java.util.*;
public class UnusualAdd {
public int addAB(int A, int B) {
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 ;
}
}
题目二
1.题目
题目链接:走方格的方案数
2.思路
3.代码实现
import java.util.*;
public class Main{
public static void main(String[]args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
int m = sc.nextInt();
int ret = sum(n,m);
System.out.println(ret);
}
}
public static int sum(int n,int m){
if((n == 1 && m >= 1)|| (m==1 && n >=1)){
return n+m;
}
return sum(n-1,m) + sum(n,m-1);
}
}