三级
C++ 算法考级专栏
真题分析、矩阵探测、递归回溯与基础语法
🎨 视觉封面【GESP】C++三级模拟题 luogu-B3849 [GESP样题 三级] 进制转换
📅 2025-05-06·✍️ OneCoder·计算中...·⏱️ 4 分钟
#GESP#C++#字符串#进制转换
GESP三级模拟样题,字符串和进制转换相关,难度★★✮☆☆。
luogu-B3849 [GESP样题 三级] 进制转换
题目要求
题目描述
小美刚刚学习了十六进制,她觉得很有趣,想到是不是还有更大的进制呢?在十六进制中,用
A表示 、F表示 。如果扩展到用Z表示 ,岂不是可以表示 进制数了嘛!所以,你需要帮助她写一个程序,完成十进制转 进制()的工作。
输入格式
输入两行,第一行包含一个正整数 ,第二行包含一个正整数 ,保证 。
输出格式
输出一行,为 的 进制表示。
输入输出样例 #1
输入 #1
CONSOLE
2 行
123
25
输出 #1
CONSOLE
1 行
4N
题目分析
解题思路
十进制转换为其他进制的基本思路是:
- 不断用目标进制R除十进制数N,得到余数
- 余数即为当前位的值,商作为新的N继续除以R
- 所有余数从后往前拼接即为结果
- 如果余数大于9,则用A-Z表示(A表示10,B表示11,以此类推)
例如,将123转换为25进制:
- 123 ÷ 25 = 4 余 23(用N表示)
- 4 ÷ 25 = 0 余 4
- 从后往前拼接:4N
因此,本题的解题思路可以分为以下几个步骤:
-
读取输入数据:
- 读取十进制数N
- 读取目标进制R(2≤R≤36)
-
进制转换处理:
- 循环处理N,直到N为0:
- 计算当前位的值:N对R取余
- 更新N:N除以R取整
- 根据余数确定当前位的表示:
- 余数小于等于9时,用数字表示
- 余数大于9时,用字母A-Z表示(10用A,35用Z)
- 将当前位添加到结果字符串的开头
- 循环处理N,直到N为0:
复杂度分析:
- 时间复杂度:,需要进行N除以R的次数
- 空间复杂度:,需要存储结果字符串
示例代码
C++
33 行
#include <iostream>
#include <string>
int main() {
// 声明变量存储十进制数N和目标进制R
int N, R;
std::cin >> N >> R;
// 用字符串存储结果
std::string result = "";
do {
// 获取当前位的值
int cur = N % R;
// 更新N为商
N /= R;
char c;
// 如果当前位大于9,需要用字母A-Z表示
if (cur > 9) {
c = char(cur - 10 + (int)'A');
} else {
// 否则用数字0-9表示
c = char(cur + '0');
}
// 将当前位添加到结果字符串的开头
result = c + result;
} while (N != 0); // 当N不为0时继续循环
// 输出结果
std::cout << result;
return 0;
}
💡 OneCoder 资源指引
所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI
🤝 技术交流与答疑
欢迎加入:C++ GESP/CSP 考级答疑群(688906745) 与 Java/Python交流群(982860385),点击可直接加群。
📚
猜你想读 · 相关文章推荐
GESP 编程与算法 · 三级⏱️ 3 分钟
【GESP】C++三级练习BCQM3091,选择题判定
GESP三级字符串string和一级知识点if-else分支语句练习,非常基础,对于我孩子来说练习重点在一级部分,字符串只是碰巧遇到了。
阅读全文 →
GESP 编程与算法 · 三级⏱️ 4 分钟
【GESP】C++三级练习 luogu-B2109 统计数字字符个数
GESP三级练习,字符串练习(C++三级大纲中6号知识点,字符串),难度★✮☆☆☆。
阅读全文 →
GESP 编程与算法 · 三级⏱️ 4 分钟
【GESP】C++三级练习 luogu-B2110 找第一个只出现一次的字符
GESP三级练习,字符串和数组练习(C++三级大纲中5号知识点,一维数组和6号知识点,字符串),难度★★☆☆☆。
阅读全文 →
OneCoder (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com
读者讨论与留言
💬 还没有读者留言,快来成为第一个讨论者吧!