#创作计划#初赛基础知识(待完成)
2025-08-01 16:09:54
发布于:北京
第一部分--进制
理论上讲,进制的数量是无限的。
但初赛中常考的是下表内容
进制 | 表示 | 开头 | 举例 |
---|---|---|---|
二进制 | B | 0b | int a = 0b10 |
八进制 | O | 0 | int a = 071 |
十进制 | D | --- | int a = 44 |
十六进制 | H | 0x | int a = 0x7F |
注意:十六进制中超过10(包含10)的数使用A~F表示
n进制转十进制
位权法--每一位上的数值乘对应的权值
例如:
转化成十进制
整数部分
小数部分
转换结果
所以
由此我们知道:
数值就是当前这一位的数
权值就是n的不同次方(n是n进制中的n)
代码实现(模板)
#include<bits/stdc++.h>
using namespace std;
#define int long long
int ch(char a) {
if (a >= '0' && a <= '9') return a - '0';
return a - 'A' + 10;
}
int p;
string s;
signed main() {
cin >> p >> s;
int ans = 0, pos = 1;
for (int i = s.size() - 1; i >= 0; i--) {
ans += ch(s[i]) * pos;
pos *= p;
}
cout << ans;
return 0;
}
十进制转n进制
-
整数部分
短除法--除2取余,逆序排列(遇到商为0结束)
例:
-
小数部分
短除法--乘2取整,逆序排列
例:
- 我们发现整数和小数的十进制数的方法刚好是反过来的
代码模版:
#include<bits/stdc++.h>
using namespace std;
#define int long long
string c = "0123456789ABCDEF";
int n, q;
signed main() {
cin >> n >> q;
string s = "";
do {
s = c[n % q] + s;
n /= q;
} while (n);
cout << s;
return 0;
}
有建议,直接提
希望上精华,希望被点赞,还希望上热门讨论
有些根据集训营笔记写的
这里空空如也
有帮助,赞一个