結果

問題 No.2385 Parse Integer with Radix
ユーザー InTheBloomInTheBloom
提出日時 2023-07-21 21:30:26
言語 D
(dmd 2.106.1)
結果
AC  
実行時間 2 ms / 2,000 ms
コード長 902 bytes
コンパイル時間 4,038 ms
コンパイル使用メモリ 170,112 KB
実行使用メモリ 5,376 KB
最終ジャッジ日時 2024-09-21 22:48:03
合計ジャッジ時間 5,069 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
5,248 KB
testcase_01 AC 2 ms
5,376 KB
testcase_02 AC 1 ms
5,376 KB
testcase_03 AC 2 ms
5,376 KB
testcase_04 AC 2 ms
5,376 KB
testcase_05 AC 1 ms
5,376 KB
testcase_06 AC 2 ms
5,376 KB
testcase_07 AC 2 ms
5,376 KB
testcase_08 AC 2 ms
5,376 KB
testcase_09 AC 1 ms
5,376 KB
testcase_10 AC 1 ms
5,376 KB
testcase_11 AC 2 ms
5,376 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import std;

void main () {
    int Q = readln.chomp.to!int;

    foreach (_; 0..Q) {
        string S = readln.chomp;
        if (S.length < 2) {
            solve(S, 10);
            continue;
        }

        int radix;
        switch (S[0..2]) {
            case "0b":
                S = S[2..$]; radix = 2;
                break;

            case "0o":
                S = S[2..$]; radix = 8;
                break;

            case "0x":
                S = S[2..$]; radix = 16;
                break;

            default:
                radix = 10;
                break;
        }

        solve(S, radix);
    }
}

auto solve (string S, int radix) {
    long res = 0;
    long base = 1;
    foreach_reverse (c; S) {
        if ('a' <= c) {
            res += base*(c-'a'+10);
        } else {
            res += base*(c-'0');
        }
        base *= radix;
    }

    writeln(res);
}
0