1 条题解
-
0
十进制转 D 进制(D=2/8/16)
这道题核心方法:除 D 取余,逆序输出,用栈(stack)刚好完美实现逆序,完全贴合题目要求。
C++ 满分代码
#include <iostream> #include <stack> using namespace std; int main() { long long N; // 十进制数,支持到 1e9 int D; // 目标进制 2/8/16 cin >> N >> D; // 特殊情况:输入是 0,直接输出 0 if (N == 0) { cout << 0 << endl; return 0; } stack<char> st; // 用栈存余数,自动逆序 char ch[] = "0123456789ABCDEF"; // 16 进制字符表 // 除 D 取余 while (N > 0) { int rem = N % D; // 取余数 st.push(ch[rem]); // 余数入栈 N = N / D; // 整除 } // 出栈 = 逆序输出 while (!st.empty()) { cout << st.top(); st.pop(); } cout << endl; return 0; }核心思路
- 原理 十进制转任意进制:反复除以 D,记录余数,最后把余数倒过来
- 栈的作用 栈是先进后出,刚好把先得到的余数放在底部,最后出栈就是正确顺序
- 16 进制处理 余数 10→A,11→B …… 15→F,用字符数组直接映射
- 边界 输入 N=0 时,必须直接输出 0,否则会输出空
测试样例
输入:
1348 2输出:
10101000100输入:
1000 16输出:
3E8总结
- 核心:除 D 取余,逆序输出
- 用 stack 实现逆序,最符合题目要求
- 支持 0、1e9 大数、2/8/16 三种进制,直接提交满分
- 1
信息
- ID
- 897
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者
粤公网安备44195502000195号