serna37's Library

Logo

C++ アルゴリズムとデータ構造のライブラリ

View the Project on GitHub serna37/library-cpp

:heavy_check_mark: 進数変換
(library/number/base_convert.hpp)

進数変換

できること

計算量

$O(log_{\vert to \vert} x)$

使い方

vector<int> cvt = base_convert(x, 10);

Verified with

Code

#pragma once
vector<int> base_convert(long long x, int to) {
    vector<int> ret;
    long long t = 1, k = abs(to);
    while (x) {
        ret.emplace_back((x * t) % k);
        if (ret.back() < 0) ret.back() += k;
        x -= ret.back() * t;
        x /= k;
        t *= to / k;
    }
    if (ret.empty()) ret.emplace_back(0);
    reverse(ret.begin(), ret.end());
    return ret;
}
#line 2 "library/number/base_convert.hpp"
vector<int> base_convert(long long x, int to) {
    vector<int> ret;
    long long t = 1, k = abs(to);
    while (x) {
        ret.emplace_back((x * t) % k);
        if (ret.back() < 0) ret.back() += k;
        x -= ret.back() * t;
        x /= k;
        t *= to / k;
    }
    if (ret.empty()) ret.emplace_back(0);
    reverse(ret.begin(), ret.end());
    return ret;
}
Back to top page