問題
問題文
シカのAtCoDeerくんは二つの正整数 $a, b$ を見つけました。$a$ と $b$ の積が偶数か奇数か判定してください。
制約
・$1 \le a, b \le 10000$
・$a,b$ は整数
収録されている問題セット
回答
回答1 (AC)
AtCoder で最初に解いた問題です。正整数 $a,b$ を受け取り、積が偶数か奇数かを判定する流れをそのままコーディングすれば良さそうです。以下のようなコードで無事ACとなりました。
abc086a-1.cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
if ( (a*b)%2==1 ) {
cout << "Odd" << endl;
} else {
cout << "Even" << endl;
}
}
回答2 (AC)
2つの整数の積は、両方の整数が奇数なら奇数、それ以外は偶数になるので、積が偶数か奇数かの判定をする上で積計算は必要ありません。この性質を利用したコードは以下のようになり、もちろんACとなりました。
abc086a-2.cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
if ( a%2==1 && b%2==1 ) {
cout << "Odd" << endl;
} else {
cout << "Even" << endl;
}
}
今回の場合、正整数 $a,b$ は高々14ビット(10000以下)なので、積は高々28ビットであり、C++ の整数型(int)は32ビットであることから、積を計算しても桁あふれは起きません。従ってこのコードは用心しすぎなのですが、一般に計算せずに計算結果の性質を判定できる場合には、計算せずに判定すべきです。
調べたこと
AtCoderに登録したら次にやることの解説
回答とほぼ同じ解法でした。
AtCoder の解説 → コンテスト全体の解説
こちらも同じ解法でした。
学んだこと
- C++ の標準入力 (整数型)
- C++ の整数型(int)は32ビット
リンク
前後の記事
- 前の記事 → AtCoderログ:0001 - AtCoderはじめました
- 次の記事 → AtCoderログ:0003 - ABC 064 A