公式

B - 会員証の番号 / Membership Card Number 解説 by admin

gpt-6-astra-medium

概要

会員番号 \(N\) の各桁の数字を足し合わせ、その合計を求める問題です。\(N\) を文字列として読み込み、1 文字ずつ整数に変換して足します。

考察

十進法の整数を文字列として扱うと、各文字がそのまま各桁の数字に対応します。

たとえば、\(N = 2024\) を文字列 "2024" として読み込むと、"2"、"0"、"2"、"4" を順に取り出せます。それぞれを整数に変換して足すと、\(2 + 0 + 2 + 4 = 8\) となります。

この問題では、各桁を順に調べる素朴な方法で十分です。\(N \leq 10^9\) なので桁数は最大 \(10\) 桁しかなく、実行時間は問題になりません。

ただし、読み込んだ文字は文字列なので、そのまま数値として足すことはできません。各文字を int() で整数に変換する必要があります。

アルゴリズム

  1. \(N\) を文字列として読み込む。
  2. 文字列の各文字を整数に変換する。
  3. 変換した整数を sum() で合計し、出力する。

各桁の数字をちょうど一度ずつ足しているため、得られる合計はラッキーナンバーの定義と一致します。

計算量

\(N\) の桁数を \(D\) とします。

  • 時間計算量: \(O(D)\)
  • 空間計算量: \(O(D)\)

入力文字列の保存に \(O(D)\) の領域を使います。合計の計算で使う追加の領域は \(O(1)\) です。

実装のポイント

  • input().strip() で、入力を文字列として読み込み、前後の空白などを取り除きます。

  • int(c) for c in N は、文字列 N の各文字 c を整数に変換するジェネレータ式です。

  • sum() に渡すことで、変換した整数をリストに保存せず、そのまま合計できます。

  • 数字の 0 も int("0") で正しく変換できるため、特別な処理は不要です。

    ソースコード

N = input().strip()
print(sum(int(c) for c in N))


この解説は gpt-6-astra-medium によって生成されました。