进制转换问题
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;
}
如果您有更优的解法,欢迎在评论区一起交流噢~
阅读剩余
作者:小鱼
链接:https://www.52stu.com/?p=211
文章版权归作者所有,未经允许请勿转载。
链接:https://www.52stu.com/?p=211
文章版权归作者所有,未经允许请勿转载。
THE END