Aizu Online Judge(AOJ)が提供している「プログラミング入門」(ITP1)の8_B問題をC++とPython で解いてみました。
ITP1 のトピック8では、文字について学びます。「プログラムで文字を扱う方法を学習します。」とあります。この学習コースを通じて、Python に慣れていきたいと考えています。
問題(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 の問題を紹介していきます。