1 条题解

  • 0
    @ 2026-8-5 14:00:58

    题解:十进制转任意进制

    思路

    反复执行:

    • 当前最低位是 N % K
    • 删除最低位:N /= K

    这样得到的数码顺序是从低位到高位,因此先放入字符串,最后反转。

    特别注意:当 N=0N=0 时,循环不会执行,需要单独输出 0

    复杂度

    时间复杂度 O(logKN)O(\log_K N),空间复杂度 O(logKN)O(\log_K N)

    参考代码

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        unsigned long long n;
        int k;
        cin >> n >> k;
    
        string digit = "0123456789ABCDEF";
        if (n == 0) {
            cout << 0 << "\n";
            return 0;
        }
    
        string ans;
        while (n > 0) {
            ans += digit[n % k];
            n /= k;
        }
        reverse(ans.begin(), ans.end());
        cout << ans << "\n";
        return 0;
    }
    

    信息

    ID
    5110
    时间
    1000ms
    内存
    128MiB
    难度
    8
    标签
    递交数
    73
    已通过
    10
    上传者