1 条题解

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

    题解:任意进制互相转换

    思路

    分成两步:

    1. 使用 value = value * A + digit,把 AA 进制数转换为十进制数值;
    2. 不断对 BB 取余,把十进制数值转换为 BB 进制。

    这是一种通用做法。两部分代码应分别封装成“字符转数码”和“数码转字符”的逻辑,减少出错。

    复杂度

    时间复杂度为 O(S+logBV)O(|S|+\log_B V),其中 VV 为十进制数值。

    参考代码

    #include <bits/stdc++.h>
    using namespace std;
    
    int value(char c) {
        if (c >= '0' && c <= '9') return c - '0';
        return c - 'A' + 10;
    }
    
    int main() {
        int a, b;
        string s;
        cin >> a >> s >> b;
    
        unsigned long long n = 0;
        for (char c : s) {
            n = n * a + value(c);
        }
    
        string digit = "0123456789ABCDEF";
        if (n == 0) {
            cout << 0 << "\n";
            return 0;
        }
    
        string ans;
        while (n > 0) {
            ans += digit[n % b];
            n /= b;
        }
        reverse(ans.begin(), ans.end());
        cout << ans << "\n";
        return 0;
    }
    

    信息

    ID
    5112
    时间
    1000ms
    内存
    128MiB
    难度
    7
    标签
    递交数
    34
    已通过
    9
    上传者