解题思路

这是一道进制转换题目,主要思路如下:

  1. 问题分析:

    • 输入一个十进制数
    • 输入目标进制 ( )
    • 需要处理负数情况
    • 需要处理16进制的字母表示
  2. 解决方案:

    • 使用除N取余法
    • 倒序保存余数
    • 处理负数符号
    • 使用字符数组映射16进制
  3. 实现细节:

    • 特判0的情况
    • 处理负数
    • 使用字符数组表示大于9的数字

代码

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main() {
    int m, n;
    // 16进制字符映射表
    char digits[] = {'0','1','2','3','4','5','6','7',
                    '8','9','A','B','C','D','E','F'};
    
    cin >> m >> n;
    
    // 处理0的特殊情况
    if(m == 0) {
        cout << "0" << endl;
        return 0;
    }
    
    // 处理负数
    string result;
    bool isNegative = m < 0;
    m = abs(m);
    
    // 进制转换
    while(m > 0) {
        result += digits[m % n];
        m /= n;
    }
    
    // 添加负号
    if(isNegative) {
        result += '-';
    }
    
    // 反转字符串
    reverse(result.begin(), result.end());
    cout << result << endl;
    
    return 0;
}
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();
        
        // 16进制字符映射表
        char[] digits = {'0','1','2','3','4','5','6','7',
                        '8','9','A','B','C','D','E','F'};
        
        // 处理0的特殊情况
        if(m == 0) {
            System.out.println("0");
            return;
        }
        
        // 处理负数
        StringBuilder result = new StringBuilder();
        boolean isNegative = m < 0;
        m = Math.abs(m);
        
        // 进制转换
        while(m > 0) {
            result.append(digits[m % n]);
            m /= n;
        }
        
        // 添加负号
        if(isNegative) {
            result.append('-');
        }
        
        // 反转字符串
        System.out.println(result.reverse().toString());
    }
}
def convert_base(m: int, n: int) -> str:
    # 16进制字符映射表
    digits = '0123456789ABCDEF'
    
    # 处理0的特殊情况
    if m == 0:
        return '0'
    
    # 处理负数
    is_negative = m < 0
    m = abs(m)
    result = []
    
    # 进制转换
    while m:
        result.append(digits[m % n])
        m //= n
    
    # 添加负号
    if is_negative:
        result.append('-')
    
    # 反转并连接
    return ''.join(result[::-1])

def main():
    m, n = map(int, input().split())
    print(convert_base(m, n))

if __name__ == "__main__":
    main()

算法及复杂度

  • 算法:数学(进制转换)
  • 时间复杂度: - 为输入数字, 为目标进制
  • 空间复杂度: - 存储结果字符串