进制转换问题

Description

输入一个十进制数N,将它转换成R进制数输出。

Input

输入数据包含两个整数N(32位整数)和R(2<=R<=16,R<>10)

Output

输出转换后的数,如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)

Sample Input

输入样例一

7 2

输入样例二

23 12

输入样例三

-4 3

Sample Output

输出样例一

111

输出样例二

1B

输出样例三

-11

python解法

# 读取输入的两个整数,n表示要转换的十进制数,r表示目标进制的基数
n, r = map(int, input().split())

# 如果n是负数,则在结果前添加负号,并将n转换为正数
sign = ''
if n < 0:
    sign = '-'  # 如果n是负数,设置sign为负号
    n = -n     # 将n转换为正数

# 定义一个包含0-9和A-F的字符串,用于表示基数超过10时的字符
digits = '0123456789ABCDEF'

# 如果n是0,则直接打印带有符号的'0'并退出程序
if n == 0:
    print(sign + '0')
    exit()  # 退出程序,因为已经处理完0的情况

# 转换过程
# 使用while循环将十进制数n转换为基数为r的进制数
result = ''
while n > 0:
    # 使用divmod函数同时获取n除以r的商和余数
    # 将n更新为商,余数用于构建结果字符串
    n, remainder = divmod(n, r)
    # 将余数转换为对应的字符并添加到结果字符串的前面
    result = digits[remainder] + result

# 打印转换后的数和符号
print(sign + result)

c++解法

#include<bits/stdc++.h> // 包含C++标准库中的所有头文件
using namespace std;

int main() {
    // 声明两个整数变量n和r,用于存储用户输入的十进制数和目标进制
    int n, r;
    // 读取用户输入的十进制数n和目标进制r
    cin >> n >> r;

    // 检查目标进制r是否在有效范围内(2-16)
    if (r < 2 || r > 16) {
        // 如果不在有效范围内,输出错误信息并返回错误代码1
        cerr << "基数R必须在2到16之间(包括2和16)" << endl;
        return 1;
    }

    // 如果输入的数n是负数,则先将其转为正数并保存负号
    string sign = "";
    if (n < 0) {
        sign = "-"; // 保存负号
        n = -n; // 将n转为正数
    }

    // 定义一个字符串digits,包含0-9和A-F,用于大于10的基数转换
    string digits = "0123456789ABCDEF";

    // 如果n为0,则直接打印结果并返回成功代码
    if (n == 0) {
        cout << "0" << endl;
        return 0; // 返回成功代码
    }

    // 定义一个字符串result,用于存储转换后的结果
    string result = "";
    // 当n大于0时,持续进行转换
    while (n > 0) {
        // 计算n除以r的余数
        int remainder = n % r; // 获取余数
        // 将余数转换为对应的字符并添加到result字符串的前面
        result = digits[remainder] + result; 
        // 更新n为n除以r的商
        n /= r; // 更新n为商
    }
    // 打印带有符号的结果字符串
    cout << sign << result << endl;

    return 0; 
}
如果您有更优的解法,欢迎在评论区一起交流噢~
阅读剩余
THE END