はまやんはまやんはまやん

hamayanhamayan's blog

check digit [第七回 アルゴリズム実技検定 A]

https://atcoder.jp/contests/past202107-open/tasks/past202107_a

解説

https://atcoder.jp/contests/past202107-open/submissions/24459496

シミュレーション問題。
問題で要求されていることを実装しよう。

まず、自分の実装ではコードを文字列で取り込んでいる。
問題文でも文字列ですという風に書いてある所を見ると、文字列で取り込むのがオススメなのかも。

偶数番目、奇数番目というのはループの添え字に対して2で割った余りを利用するのがいい。
上級者はbit演算を使うかもしれないが、もちろんそれでもいい。

文字列としてコードを取り込んだ場合、各桁は文字として扱われるが、これを数に変換する必要がある。
これにはいくつか方法があり、標準ライブラリでも使える関数があるが、自分はS[i]-'0'のようにして変換している。
これはAscii的な所を意識した部分であるが、パッと見て何を目的としたものか分かりにくいかもしれない。
文字を数に変換していると思ってほしい。

string S;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> S;

    int tot = 0;
    rep(i, 0, 14) if (i % 2 == 0) tot += S[i] - '0';
    tot *= 3;
    rep(i, 0, 14) if (i % 2 == 1) tot += S[i] - '0';

    if (S[14] - '0' == tot % 10) cout << "Yes" << endl;
    else cout << "No" << endl;
}