小米OJ 110(进制转换)

本文详细解析了如何从一种进制数转换到另一种进制数的算法实现,通过具体的C++代码示例,展示了手动进行进制转换的过程,避免使用现成的库函数,适合初学者理解进制转换的基本原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                 进制转换
              序号:#110 难度:一般 时间限制:1000ms 内存限制:10M

描述
给出一个P进制整数N,求N的Q进制表示(0≤N≤32767,2≤P≤16,2≤Q≤16)。 大于 9 的数字依次使用小写字母 a、b、c、d、e、f 表示。 请勿使用已存在的进制转换库或函数,比如PHP中的base_convert()等。

输入
输入3个数,以空格分隔: 第1个数是待转换的数, 第2个数是待转换的数的进制, 第3个数是转换后的数的进制。

输出
输入转换后的数

输入样例
31 10 16

输出样例
1f

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	int p,q,s=0,t=1,i,j;
	char n[20],a[20];
	cin>>n>>p>>q;
	for(i=strlen(n)-1;i>=0;i--)
	{
		for(j=0;j<(strlen(n)-i-1);j++)
		{
			t=t*p;
		}
		if(n[i]>='a'&&n[i]<='f')
		{
			s=s+(n[i]-'a'+10)*t;
		}
		else
			s=s+(n[i]-'0')*t;
		t=1;
	}
	i=0;
	while(s>0)
	{
		if(s%q>=10)
			a[i]=(s%q-10)+'a';
		else
			a[i]=s%q+'0';
		s=s/q;
		i++;
	}
	for(j=i-1;j>=0;j--)
	{
		cout<<a[j];
	}
	cout<<endl;
	return 0;
}
### 东华OJ平台上十进制转换方法 在处理东华OJ平台上的数值或问题答案时,如果需要将其他进制的数(如二进制、八进制、十六进制等)转换为十进制形式,可以采用如下方式实现。 #### 数学原理 对于任意一个N进制数,其表示形式可以通过按权展开的方式转化为十进制数。假设有一个N进制数`d_k d_{k-1} ... d_1 d_0`,其中每一位`d_i`都是小于N的一个整数,则该数可以用以下公式计算出对应的十进制值: \[ D = \sum_{i=0}^{k} (d_i \times N^i) \] 例如,在十六进制中,`A`对应十进制中的`10`,因此十六进制数`ABCD`可以被分解并按照上述公式进行计算[^2]。 #### 实现代码 以下是基于Python语言编写的通用函数,用于将不同进制下的字符串表示形式转换为十进制整数: ```python def convert_to_decimal(number_str, base): """ 将指定基数的数字字符串转换为十进制整数。 参数: number_str (str): 输入的数字字符串,支持大小写字母。 base (int): 基数范围为2到16之间的整数。 返回: int: 转换后的十进制整数。 """ if not (2 <= base <= 16): raise ValueError("Base must be between 2 and 16.") digits_map = { &#39;0&#39;: 0, &#39;1&#39;: 1, &#39;2&#39;: 2, &#39;3&#39;: 3, &#39;4&#39;: 4, &#39;5&#39;: 5, &#39;6&#39;: 6, &#39;7&#39;: 7, &#39;8&#39;: 8, &#39;9&#39;: 9, &#39;A&#39;: 10, &#39;B&#39;: 11, &#39;C&#39;: 12, &#39;D&#39;: 13, &#39;E&#39;: 14, &#39;F&#39;: 15 } is_negative = False if number_str.startswith(&#39;-&#39;): is_negative = True number_str = number_str[1:] decimal_value = 0 power = 0 for char in reversed(number_str.upper()): if char not in digits_map or digits_map[char] >= base: raise ValueError(f"Invalid character &#39;{char}&#39; for base {base}.") decimal_value += digits_map[char] * (base ** power) power += 1 return -decimal_value if is_negative else decimal_value # 测试用例 print(convert_to_decimal(&#39;FF&#39;, 16)) # 输出:255 print(convert_to_decimal(&#39;1010&#39;, 2)) # 输出:10 print(convert_to_decimal(&#39;7B&#39;, 16)) # 输出:123 print(convert_to_decimal(&#39;-ABC&#39;, 16)) # 输出:-2748 ``` 此代码实现了从任何给定进制(2至16之间)转为十进制的功能,并考虑到了可能存在的负号情况[^1]。 #### 注意事项 当输入的数据包含多个测试实例时,应逐一读取每组数据并对每一组分别调用上述函数完成转换操作。此外,需严格按照题目要控制输出格式,确保无多余空白字符以及满足特定分隔符需[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值