Official

A - チェックディジット/check digit Editorial by sugarrr


問題文の指示通りに計算していきましょう。

まず、文字列型で入力を受け取ります。(long long などの整数型で受け取ると、\(S\) の先頭が \(0\) の時に桁数が \(15\) より小さくなり、少しややこしいです。)

変数 \(sum\) を用意します。はじめ \(sum=0\) です。

\(S_0 + S_2 + \dots + S_{12}\)\(sum\) に加えます。(0-indexedなので、\(1\) 番左の数は \(S_0\) であることに注意しましょう。)

\(sum\)\(3\) 倍します。

\(S_1 + S_3 + \dots + S_{13}\)\(sum\) に加えます。

最後に、\(sum\)\(10\) で割った余りと、\(S_{14}\) が一致するか調べれば良いです。(繰り返しになりますが、0-indexedなので、\(1\) 番右の桁の数は \(S_{14}\) であることに注意しましょう。)

この方針で実装すると、次のようになります。

C++による実装例:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

signed main(){
    string s;cin>>s;
    ll sum=0;
    for(int i=0;i<=13;i+=2){
        sum+=s[i]-'0';
    }
    sum*=3;
    for(int i=1;i<=13;i+=2){
        sum+=s[i]-'0';
    }
    sum%=10;
    if(sum==s[14]-'0'){
        cout<<"Yes"<<endl;
    }else{
        cout<<"No"<<endl;
    }
    return 0;
}

posted:
last update: