AIZU ONLINE JUDGE

AOJ ITP1 8_B(Sum of Numbers)を解く

AOJ_ITP1_8_B

Aizu Online Judge(AOJ)が提供している「プログラミング入門」(ITP1)の8_B問題をC++とPython で解いてみました。

ITP1 のトピック8では、文字について学びます。「プログラムで文字を扱う方法を学習します。」とあります。この学習コースを通じて、Python に慣れていきたいと考えています。

問題(8_B: Sum of Numbers)

問題はリンク先をご覧ください。

AOJ ITP1 8_B問題:Sum of Numbers

与えられた数字を文字列として読み込み、各桁の合計を求める問題です。

解答案

C++ プログラム例(ITP1 8_B)

与えられる整数は、1000桁以下という制約があるため、整数として読み込めません。文字列として読み込み、一桁毎に文字として桁の数を加えていきます。

数字を文字として読み込んだ場合、’0′ を引けば、桁の数が分かります(18行目)。

#include <iostream>

using namespace std;

int main()
{

	while (1) {
		string x;
		cin >> x;

		if (x == "0") {
			break;
		}

		int answer = 0;
		for (int i = 0; i < x.length(); ++i) {
			answer += x[i] - '0';
		}
		cout << answer << endl;
	}

	return 0;
}

Python プログラム例(ITP1 8_B)

Python は、for 文 の in を使って文字列から、1文字の文字列を取り出すことができます。その1文字を int 関数を使って数に変換します。

while True:
    x = input()
    if x == "0":
        break

    answer = 0
    for ch in x:
        answer += int(ch)
    print(answer)

リストの内包表記を使って、関数 sum を使うと以下のようにすっきりと書けます。

while True:
    x = input()
    if x == "0":
        break
    print(sum([int(ch) for ch in x]))

上記プログラムは、すべて AOJ で「AC(Accepted=正解)」と判定されます。

最後に

前回は、英字大文字と小文字を、今回は数字を扱いました。文字列についても Python は、すっきり書けることが分かりました。

引き続き、ITP1 の問題を紹介していきます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA