GESP4级专题2:进制转换

描述

N进制数指的是逢N进一的计数制。例如,人们日常生活中大多使用十进制计数,而计算机底层则一般使用二进制。除此之外,八进制和十六进制在一些场合也是常用的计数制(十六进制中,一般使用字母 A 至 F 表示十至十五;本题中,十一进制到十五进制也是类似的)。
在本题中,我们将给出N个不同进制的数。你需要分别把它们转换成十进制数。

输入描述

输入的第一行为一个十进制表示的整数N。接下来N行,每行一个整数K,随后是一个空格,紧接着是一个K进
制数,表示需要转换的数。保证所有K进制数均由数字和大写字母组成,且不以 0 开头。保证K进制数合法。
保证N<=1000 ;保证2<=K<=16
保证所有K进制数的位数不超过9。

输出描述

输出N行,每一个十进制数,表示对应K进制数的十进制数值。
举个栗子:
1

16 3F0
逐步分解:

个位为0,累加0*(16^0)(sum=0)

十位为F(转化为十进制的15),累加15*(16^1)(sum=240)

百位为3,累加3*(16^2)(sum=1008)

所以答案为1008。

关键是对ASCII码的了解。

#include <bits/stdc++.h>
using namespace std;
int n,k,a[20],sum;
string x;
int main(){
    cin>>n;
    while(n--){
        sum=0;
        cin>>k>>x;
        int q=1;
        while(q<=x.length()){
            if(x[q-1]>='A'){
                a[q]=int(x[q-1]-55);
            }
            else a[q]=int(x[q-1]-48);
            sum+=a[q]*pow(k,x.length()-q);
            q++;
        }
        cout<<sum<<endl;
    }
    return 0;
}

### GESP202309 四级考试进制转换编程题解析 对于GESP202309四级考试中的进制转换题目,主要考察的是考生对不同进制之间相互转换的理解以及实现这些转换的能力。具体来说,该类题目通常涉及将给定的不同进制数值(如二进制、八进制或其他任意基数)转换成十进制表示形式。 #### 题目概述 题目要求处理一系列由用户输入的数据组,每一组数据包含两个部分:首先是待转换数所在的原始进制\( K \),其次是按照此进制给出的具体数值字符串。程序的任务是对每一个这样的组合执行相应的计算操作,最终输出对应的十进制结果[^3]。 #### 实现思路 解决此类问题的关键在于理解如何通过数学运算完成从一种特定的计数体系到另一种的标准表达方式之间的映射关系。这里介绍了一种通用的方法来应对各种可能遇到的情况: 1. **初始化变量**:读取输入参数`N`作为后续循环次数的基础;准备用于存储中间结果的工作区。 2. **遍历所有条目**:针对每一对`(K, num)`进行如下步骤: - 将字符型的num逐位拆解为单独元素; - 对于每一位上的数字d及其位置i(从右向左编号), 计算其权重w=Ki; - 使用公式\[decimal += d * w\]累加得到总和即为目标十进制值。 3. **输出答案**:打印或返回经过上述过程获得的结果列表。 下面是一个Python版本的例子代码实现了这个逻辑: ```python def convert_to_decimal(base, number_str): decimal_value = 0 power = 0 for digit_char in reversed(number_str): # 反转字符串以便按权相乘 try: digit = int(digit_char) except ValueError: raise Exception(f"Invalid character '{digit_char}' found.") if not (0 <= digit < base): raise Exception( f"Digit {digit} is out of range for base-{base}." ) decimal_value += digit * (base ** power) power += 1 return decimal_value if __name__ == "__main__": n_cases = int(input().strip()) results = [] while n_cases > 0: k_base, raw_num = input().split() converted_result = convert_to_decimal(int(k_base), str(raw_num)) results.append(converted_result) n_cases -= 1 for res in results: print(res) ``` 这段脚本首先定义了一个辅助函数`convert_to_decimal()`用来做实际的进制转换工作,接着在外层控制结构里完成了整个流程的调度与管理。注意这里的异常处理机制可以有效防止非法输入造成程序崩溃。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值