1 条题解
-
0
自动搬运
来自洛谷,原作者为

ShanCreeperPro
DILL QQTeam:746219450搬运于
2025-08-24 21:13:58,当前版本为作者最后更新于2022-03-24 22:12:27,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
B3620 x 进制转 10 进制
最近题库频繁出现这种转换进制的题目,那我就细细讲一下如何将 进制转换成 10 进制。
好耶超多经验!首先第一个问题:啥是进制?
我们人类现在最经常的使用十进制。
每逢 10 个就进 1 个就是十进制。
比如十个 1 记作 10。十个 10 记作 100。
对于 进制:
- 如果 ,采用的数字为 0 到 。
- 如果 ,用完 后,开始用 。
例如用十六进制计数:
0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 ... 19 1A 1B 1C 1D 1E 1F 20 21 ... FE FF 100 101 102...
讲完进制后,我们还需要知道一个东西:权重。
每个数字都有对应的权重。
在十进制中:
个位权重是 1,十位权重是 10,百位权重是 100...
$$(678)_{10} = 6 \times 100 + 7 \times 10 + 8 \times 1 $$所以:
- 十进制,逢 10 进十位,100 进百位,1000 进千位;
- k 进制,逢 k 进第二位, 进百位, 进千位;
那么如何算出 进制数字的 10 进制数字?
例如:
$$(12341)_5 = 1 \times 5^4 + 2 \times 5^3 + 3 \times 5^2 + 4 \times 5 + 1 = 971 = (971)_{10} $$
多练手几道题:
$$(123)_7 = 1 \times 7^2 + 2 \times 7 + 3 = 49 + 14 + 3 = 66 $$ $$(654)_8 = 6 \times 8^2 + 5 \times 8 + 4 = 6 \times 64 + 40 + 4 = 428 $$懂得了其中的道理了吧。
所以,我们就可以用上面讲的内容用编程实现 进制转 10 进制。
-
读入 和字符串 :
-
将 倒着存入 ,将字母类型变成
int。
int charToInt(char c){ if('0'<=c&&c<='9') return c-'0'; return c-'A'+10; } int len=S.size(); for(int i=len-1;i>=0;i--) a[len-1-i]=charToInt(S[i]);- 用我们刚刚讲的权重计算进制公式,第 i 位的贡献是 :
int ans=0,w=1; for(int i=0;i<S.size();i++){ ans+=w*a[i]; w*=x; }- w 表示每次的 。
好的,那么这道题就讲完了,这里是完整代码:
#include <bits/stdc++.h> using namespace std; int x, a[105]; // 输入x进制 string S; // char转数码 int charToInt(char c) { if('0'<=c&&c<='9') return c-'0'; return c-'A'+10; } int main(void) { cin>>x>>S; int len=S.size(); for(int i=len-1;i>=0;i--) a[len-1-i]=charToInt(S[i]); int ans=0,w=1; for(int i=0;i<len+1;i++){ ans+=w*a[i]; w*=x; } cout<<ans; return 0; }
- 1
信息
- ID
- 7589
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者