洛谷B3849 [GESP样题 三级] 进制转换

题目链接:https://www.luogu.com.cn/problem/B3849

[GESP样题 三级] 进制转换

题目描述

小美刚刚学习了十六进制,她觉得很有趣,想到是不是还有更大的进制呢?在十六进制中,用 A 表示 10、F 表示 15。如果扩展到用 Z 表示 35,岂不是可以表示 36 进制数了嘛!

所以,你需要帮助她写一个程序,完成十进制转 R 进制(2<=R<=36)的工作。

输入格式

输入两行,第一行包含一个正整数 N,第二行包含一个正整数 R,保证 1<=N<=10^6。

输出格式

输出一行,为 N 的 R 进制表示。

样例 #1

样例输入 #1

123
25

样例输出 #1

4N

思路:

为了将十进制数转换为任意给定的 R 进制(2≤R≤36),我们可以使用除 R 取余的方法来逐位计算 R 进制的每一位。注意,当 R 大于 10 时,我们需要使用字符 'A' 到 'Z' 来表示 10 到 35

AC代码如下:

#include <iostream>
#include <string>
using namespace std;
// 函数:将十进制数转换为R进制字符串
string decToBaseR(int N, int R) {
string result = "";
// 处理特殊情况:当N为0时,直接返回"0"
if (N == 0) return "0";
// 逐位计算R进制表示
while (N > 0) {
int remainder = N % R; // 计算余数
if (remainder < 10) {
result = char(remainder + '0') + result; // 余数小于10,直接转换为字符
}
else {
result = char(remainder - 10 + 'A') + result; // 余数大于等于10,转换为'A'-'Z'
}
N /= R; // 更新N为商
}
return result;
}
int main() {
int N, R;
cin >> N >> R; // 读取十进制数和进制数
// 调用函数并输出结果
cout << decToBaseR(N, R) << endl;
return 0;
}
posted @   Tomorrowland_D  阅读(220)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示