これは上手にやろう!
問題概要
2 つの正の整数 を足すとき、繰り上がりが発生するかどうかを判定せよ。
制約
考えたこと
一見いかめしい問題を解くときには、少しでも思考をシンプルにしていこう!
繰り上がりがないというのは、次のことと同値である。
一の位, 十の位, ... と考えていったときに、どの桁についても、桁の値の和が 9 以下である
つまり、この条件を満たすかどうかを判定すればよいのだ。
実装方針は色々考えられる。僕は整数を文字列として入力を受け取ることとした。そして、文字列 A
, B
をそれぞれ右側(一の位側)から見ていきたいので、A
, B
をそれぞれ reverse
して、左側から順に見ていくこととした。
コード
#include <bits/stdc++.h> using namespace std; int main() { string A, B; cin >> A >> B; reverse(A.begin(), A.end()); reverse(B.begin(), B.end()); bool easy = true; for (int i = 0; i < min(A.size(), B.size()); i++) { int a = A[i] - '0', b = B[i] - '0'; if (a + b >= 10) easy = false; } cout << (easy ? "Easy" : "Hard") << endl; }