hiro1729 競プロ

競プロの解説などを書きます。

PAST01-A 解説

A - 2倍チェック

3桁の整数が与えられて2倍する問題ですが、入力に英小文字が紛れ込むことがあるので、その場合はerrorを出力します。1文字ずつ見ていって、英小文字が出たかどうかを管理すれば解くことができます。 文字列を数値に変換するのには、PythonではintC++ではstoiが使えます。

S = input()
isnumber = True
for i in S:
    if not '0' <= i <= '9':
        isnumber = False
if isnumber:
    print(int(S) * 2)
else:
    print("error")
#include <bits/stdc++.h>
using namespace std;

int main() {
    string S;
    cin >> S;
    bool isnumber = true;
    for (int i = 0; i < 3; i++) {
        if (!('0' <= S[i] && S[i] <= '9')) {
            isnumber = false;
        }
    }
    if (isnumber) {
        cout << stoi(S) * 2 << '\n';
    } else {
        cout << "error\n";
    }
}

また、数字として解釈できない文字列をintまたはstoiに渡すとエラーが検出されるので、それを利用して解くこともできます。

S = input()
try:
    print(int(S) * 2)
except:
    print("error")

ただし、C++では先頭に0があると8進数、0xがあると16進数として解釈されるので、そのケースを除くと上のC++のコードとほぼ同じになり効率が悪くなります。