[Jobdu]題目1507:加減乗除しない加算

4033 ワード

タイトルの説明:
1つの関数を書いて、2つの整数の和を求めて、関数の体内で+、-、*、/の4つの演算記号を使用してはいけないことを要求します.
入力:
入力には、複数のテストサンプルが含まれる場合があります.各テストケースについて、2つの整数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
", 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 ****************************************************************/