【C++ 真题】P1143 进制转换

P1143 进制转换

题目描述

请你编一程序实现两种不同进制之间的数据转换。

输入格式

共三行,第一行是一个正整数,表示需要转换的数的进制 n (2≤n≤16)n\ (2\le n\le 16)n (2n16),第二行是一个 nnn 进制数,若 n>10n>10n>10 则用大写字母 A∼F\verb!A!\sim \verb!F!AF 表示数码 10∼1510\sim 151015,并且该 nnn 进制数对应的十进制的值不超过 10910^9109,第三行也是一个正整数,表示转换之后的数的进制 m (2≤m≤16)m\ (2\le m\le 16)m (2m16)

输出格式

一个正整数,表示转换之后的 mmm 进制数。

输入输出样例 #1

输入 #1

16
FF
2

输出 #1

11111111

题解

#include "bits/stdc++.h"
using namespace std;
long long idx = 1;
int ans[100000000], n, m, sum = 0;
string a[6] = {"A", "B", "C", "D", "E", "F"}, s;
int main(){
	cin>>n>>s>>m;
	for(int i=s.size()-1;i>=0;i--){
		if((s[i] - '0') > 10) ans[idx] = s[i] - 'A' + 10;
		else ans[idx] = s[i] - '0';
		idx++;
	}
	int x = 0;
	for(int i=1;i<idx;i++){
		sum += ans[i] * pow(n, x);
		ans[i] = 0;
		x++;
	}
//	cout<<sum<<endl;
	idx = 1;
	while(sum/m != 0){
		ans[idx] = sum%m;
//		cout<<n%16<<endl;
		sum/=m;
		idx++;
	}
	ans[idx] = sum;
	
	for(int i=idx;i>=1;i--){
		if(ans[i] >= 10) cout<<a[ans[i]-10];
		else cout<<ans[i];
	}
	
	return 0;
} 
### 蓝桥杯竞赛中的进制转换真题与练习 #### Python内置的进制转换函数 Python 提供了一些内置函数用于不同进制之间的转换。例如,`bin()` 可以将整数转换为二进制字符串[^1];`oct()` 用来将整数转换成八进制字符串;而 `hex()` 则可以将整数转换为十六进制字符串。对于其他进制到十进制的转换,则可以通过 `int()` 函数实现,指定第二个参数作为原始数值的进制即可完成转换。 以下是几个具体的例子: ```python print(bin(23)) # 输出: '0b10111' print(oct(73)) # 输出: '0o111' print(hex(255)) # 输出: '0xff' # 其他进制转十进制 print(int('10111', 2)) # 输出: 23 print(int('111', 8)) # 输出: 73 print(int('ff', 16)) # 输出: 255 ``` #### 手动计算进制转换方法 除了利用 Python 的内置函数外,还可以手动模拟进制转换的过程。比如,将十进制数 23 转换为二进制时,采用连续除以 2 并记录余数的方式得出最终结果 \(10111\) [^2]。同样地,将十进制数 73 转换成八进制的结果是 \(111\),以及把十进制数 255 转化为十六进制后的形式为 \(FF\)。 #### C++ 实现方式 在某些情况下可能需要用其他编程语言解决此类问题,在 C++ 中也可以轻松处理类似的题目。下面是一个简单的程序片段展示如何将任意给定的一个十进制整型数据转化为对应的十六进制表达式[^3]: ```cpp #include <iostream> using namespace std; int main(){ int num; cin >> num; string hexStr = ""; const char map[]={'0','1','2','3','4','5','6','7', '8','9','A','B','C','D','E','F'}; do{ int remainder=num%16; hexStr=map[remainder]+hexStr; num /=16; }while(num>0); cout<<hexStr<<endl; } ``` 此外还有更复杂的场景涉及到超大规模的数据输入输出操作,这时就需要考虑效率更高的算法设计策略了[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QuantumStack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值