#CSP复习计划# 进制装换(找网图)
2025-09-18 20:37:24
发布于:福建
近四年考察
年份 | 题号 | 题型 | 分值 |
---|---|---|---|
2020 | 第9题 | 单项选择 | 2分 |
2020 | 第17题 | 阅读程序 | 13.5分 |
2021 | 第7题 | 单项选择 | 2分 |
2023 | 第2题 | 单项选择 | 2分 |
2023 | 第9题 | 单项选择 | 2分 |
难易度:中等
不同的进制
在计算机中,除二进制外,比较常用的还有八进制和十六进制。
进制 | 基数 | 进位原则 | 基本符号 |
---|---|---|---|
二进制(B) | 2 | 逢2进1 | 0,1 |
八进制(O) | 8 | 逢8进1 | 0~7 |
十进制(D) | 10 | 逢10进1 | 0~9 |
十六进制(H) | 16 | 逢16进1 | 0 ~ 9,A ~ F |
保命笔记:易错点:A相当于十进制中的 10
进制转换
-
- 十进制转化成进制
(1)整数部分
短除法,除K取余,直到商是0,余数从下到上输出,即为K进制的整数部分。
- 十进制转化成进制
例:十进制199转化成八进制
- (2)小数部分
短乘法:乘K取整,直到小数部分是0或达到指定精度,整数部分从上到下输出,即为K进制的小数部分。
例:十进制0.3125转化成八进制
保命笔记:绝大部分浮点数无法用二进制精确表示,如 0.1
2. 进制转化成十进制
每一位上的数字乘以对应的位权,整数部分位权是
从n进制到m进制的程序
//将n进制数字num,转换成m进制数
//(其中2 <= n,m <= 16,n进制数对应的十进制的值不超过int范围)
#include <iostream>
#include <string>
using namespace std;
int main() {
int n, m;
string num;
cin >> n >> num >> m;
//n进制num转换成十进制数ans
int ans = 0, w = 1;
int len = num.length();
for (int i = len - 1; i >= 0; i--){
if ('A' <= num[i] && num[i] <= 'F'){
ans = ans + (num[i] - 'A' + 10) * w;
} else {
ans = ans + (num[i] - '0') * w;
}
w *= n;
}
//十进制数ans转换成m进制
char mnum[100] = {}, cnt = 0;
while (ans != 0){
int tmp = ans % m;
if (tmp >= 10){
mnum[cnt++] = tmp - 10 + 'A';
}else{
mnum[cnt++] = tmp + '0';
}
ans /= m;
}
for (int i = cnt - 1; i >= 0; i--){
cout << mnum[i];
}
return 0;
}
这里空空如也
有帮助,赞一个