[Jobdu] 题目1507:不用加减乘除做加法
- 题目描述:
-
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
- 输入:
-
输入可能包含多个测试样例。
对于每个测试案例,输入为两个整数m和n(1<=m,n<=1000000)。
- 输出:
-
对应每个测试案例,输出m+n的值。
- 样例输入:
-
3 4 7 9
- 样例输出:
-
7 16
不用+、-、*、/ 那只能使用二进制了,使用异或^得到不带进位的结果,使用&得到进位,重复操作直至没有进位。
1 #include <cstdio> 2 3 int add(int a, int b) { 4 int n1, n2; 5 do { 6 n1 = a ^ b; 7 n2 = (a & b) << 1; 8 9 a = n1; 10 b = n2; 11 } while (n2 != 0); 12 13 return n1; 14 } 15 16 int main() { 17 int a, b; 18 while (scanf("%d %d", &a, &b) != EOF) { 19 printf("%d\n", add(a, b)); 20 } 21 return 0; 22 } 23 24 /************************************************************** 25 Problem: 1507 26 User: hupo250 27 Language: C++ 28 Result: Accepted 29 Time:10 ms 30 Memory:1020 kb 31 ****************************************************************/