[Jobdu]題目1507:加減乗除しない加算
4033 ワード
タイトルの説明:
1つの関数を書いて、2つの整数の和を求めて、関数の体内で+、-、*、/の4つの演算記号を使用してはいけないことを要求します.
入力:
入力には、複数のテストサンプルが含まれる場合があります.各テストケースについて、2つの整数mとn(1<=m、n<=1000000)と入力します.
出力:
各テストケースに対応して、m+nの値を出力します.
サンプル入力:
サンプル出力:
+、-、*、/を使わないとバイナリしか使えません.異或^を使ってキャリーを持たない結果を得て、キャリーを使って&得て、キャリーがないまで操作を繰り返します.
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 ****************************************************************/