题目描述:
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
题目解答:
法一,利用 java 内置大数运算
法二,利用数的二进制运算,在这个过程中注意进位的操作
其中 & 可以用于取余数,^ 可用于处理进位操作
import java.util.*;
import java.math.*;
public class Solution {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while (input.hasNext()) {
int m = input.nextInt();
int n = input.nextInt();
System.out.println("Solution1:");
System.out.println(Add1(m, n));
System.out.println("Solution2:");
System.out.println(Add2(m, n));
}
input.close();
}
//利用 java 内部大数的运算,感觉有点作弊的嫌疑
public static int Add1(int num1, int num2) {
BigInteger a = new BigInteger(String.valueOf(num1));
BigInteger b = new BigInteger(String.valueOf(num2));
return a.add(b).intValue();
}
//利用二进制的加法运算
public static int Add2(int num1, int num2) {
while (num2 != 0) {//进位为 0 时退出
int temp = num1 ^ num2;//得到余数
num2 = (num1 & num2) << 1;//进位操作
num1 = temp;//保留余数
}
return num1;
}
}
运行结果:
Input:
1 2
1000 1000
999999 999999
Output:
Solution1:
3
Solution2:
3
Solution1:
2000
Solution2:
2000
Solution1:
1999998
Solution2:
1999998