跳转至

进制转换

视频讲解

🎥 视频讲解

K 进制转 10 进制

将一个 K 进制数转换为 10 进制数。

模板题

自建OJ: K 进制转 10 进制

代码实现

参考实现
// K 进制字符串转 10 进制
#include <bits/stdc++.h>
using namespace std;

int charToVal(char c) {
    if (isdigit(c)) return c - '0';
    return c - 'A' + 10;  // A~Z -> 10~35
}

long long convertToDecimal(const string &s, int base) {
    long long res = 0;
    for (char c : s) {
        res = res * base + charToVal(c);
    }
    return res;
}

int main() {
    string s;
    int base;
    cin >> s >> base;
    cout << convertToDecimal(s, base) << '\n';
    return 0;
}
import java.util.Scanner;

public class Main {

    // 字符转对应数值(0~9, A~Z)
    static int charToVal(char c) {
        if (c >= '0' && c <= '9') return c - '0';
        return c - 'A' + 10;
    }

    // K 进制转 10 进制
    static long convertToDecimal(String s, int base) {
        long res = 0;
        for (int i = 0; i < s.length(); i++) {
            res = res * base + charToVal(s.charAt(i));
        }
        return res;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        int base = sc.nextInt();
        System.out.println(convertToDecimal(s, base));
    }
}
# K 进制字符串转 10 进制

def char_to_val(c):
    if c.isdigit():
        return ord(c) - ord('0')
    return ord(c) - ord('A') + 10

def convert_to_decimal(s, base):
    res = 0
    for c in s:
        res = res * base + char_to_val(c)
    return res

s, base = input().split()
base = int(base)
print(convert_to_decimal(s, base))

10 进制转 K 进制

将一个 10 进制数转换为 K 进制数。

模板题

自建OJ: 10 进制转 K 进制

代码实现

参考实现
// 10 进制转 K 进制(K <= 36)
#include <bits/stdc++.h>
using namespace std;

string convertToBase(long long n, int base) {
    if (n == 0) return "0";
    string digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    string res;
    while (n > 0) {
        res = digits[n % base] + res;
        n /= base;
    }
    return res;
}

int main() {
    long long n;
    int base;
    cin >> n >> base;
    cout << convertToBase(n, base) << '\n';
    return 0;
}
import java.util.Scanner;

public class Main {

    // 10 进制转 K 进制(K <= 36)
    static String convertToBase(long n, int base) {
        if (n == 0) return "0";
        String digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        StringBuilder res = new StringBuilder();

        while (n > 0) {
            res.append(digits.charAt((int)(n % base)));
            n /= base;
        }

        return res.reverse().toString();
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
        int base = sc.nextInt();
        System.out.println(convertToBase(n, base));
    }
}
# 10 进制转 K 进制(K <= 36)

def convert_to_base(n, base):
    if n == 0:
        return "0"
    digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    res = []
    while n > 0:
        res.append(digits[n % base])
        n //= base
    return ''.join(reversed(res))

n, base = map(int, input().split())
print(convert_to_base(n, base))

练习题单

进制转换