【GESP真题解析】第 6 集 GESP 四级 2023 年 9 月编程题 1:进制转换
大家好,我是莫小特。
这篇文章给大家分享 GESP 四级 2023 年 9 月编程题第 1 题:进制转换。
题目链接
洛谷链接:B3869 进制转换
一、完成输入
根据输入格式描述,输入一个整数 N,数据范围: N ≤ 1000 N\le 1000 N≤1000。因此使用 int 类型。
int N;
cin>>N;
接下来还需要输入 N 行,每行有两个数,第一个是 K,第二个是 K 进制数。
输入 N 行需要用到 for 循环。
for(int i=1;i<=N;i++)
{}
第一个是 K,表示 K 进制,范围: 2 ≤ K ≤ 16 2\le K \le 16 2≤K≤16。
int K;
for(int i=1;i<=N;i++)
{cin>>K;
}
考虑到输入的 K 进制数由数字和大写字母组成,并且不以 0 开头,使用字符串或者字符数组存储,题目中说明,保证所有 K 进制数的位数不超过 9,可以扩大元素个数。
char str[50];
int K;
for(int i=1;i<=N;i++)
{cin>>K;cin>>str;
}
通过这个方法就完成了题目的输入,接下来分析题意。
二、分析题意
根据题目描述,需要将 K 进制数转换为十进制数输出,根据题目中的说明:
对于任意一个 L L L 位 K K K 进制数,假设其最右边的数位为第 0 0 0 位,最左边的数位为第 L − 1 L-1 L−1 位,我们只需要将其第 i i i 位的数码乘以权值 K i K^i Ki,再将每位的结果相加,即可得到原 K K K 进制数对应的十进制数。
下面是两个例子:
(1)八进制数 1362
对应的十进制数为: 1 × 8 3 + 3 × 8 2 + 6 × 8 1 + 2 × 8 0 = 754 1×8^3+3×8^2+6×8^1+2×8^0=754 1×8