公式

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

gpt-6-astra-medium

概要

会員番号 \(N\) の各桁の数字を足し合わせて、ラッキーナンバーを求めます。入力を文字列として受け取ると、各桁を簡単に取り出せます。

考察

十進法で表された整数を文字列として見ると、各文字が各桁の数字に対応します。

たとえば、\(N = 2024\) の場合、文字列 "2024" を 1 文字ずつ取り出すと "2", "0", "2", "4" になります。それぞれを整数に変換して足すと、

\(2 + 0 + 2 + 4 = 8\)

となり、答えが求まります。

この問題では、各桁を順番に調べる素朴な方法で十分です。\(N \leq 10^9\) より桁数は最大でも \(10\) 桁なので、実行時間を心配する必要はありません。

ただし、取り出した文字はそのままでは数値として足せません。各文字を int() で整数に変換することが重要です。

アルゴリズム

  1. 入力された \(N\) を文字列 n として受け取ります。
  2. n の各文字 c を int(c) で整数に変換します。
  3. 変換した整数を sum() ですべて足し合わせます。
  4. 求めた和を出力します。

計算量

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

  • 時間計算量: \(O(D)\) — 各桁を 1 回ずつ処理します。
  • 空間計算量: \(O(D)\) — 入力文字列を保持します。入力文字列以外の追加領域は \(O(1)\) です。

実装のポイント

  • input().strip() で、行の前後の空白を除いた文字列を取得します。

  • int(c) により、たとえば文字 "2" を整数 \(2\) に変換できます。文字 "0" も整数 \(0\) として正しく処理できます。

  • sum(int(c) for c in n) は、各文字を整数に変換しながら合計します。リストを作る必要はありません。

    ソースコード

# 問題文から独立に実装: 文字列にして 1 文字ずつ数字に戻して足す
n = input().strip()
print(sum(int(c) for c in n))


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