进制转换-题解

题目描述

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

输入格式

共三行,第一行是一个正整数,表示需要转换的数的进制 n (2≤n≤16)n (2≤n≤16),第二行是一个 nn 进制数,若 n>10n>10 则用大写字母 A∼FA∼F 表示数码 10∼1510∼15,并且该 nn 进制数对应的十进制的值不超过 109109,第三行也是一个正整数,表示转换之后的数的进制 m (2≤m≤16)m (2≤m≤16)。

输出格式

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

样例 #1

样例输入 #1

16
FF
2

样例输出 #1

11111111

思路

1.把原式转换成十进制:

把原字符串每个字母分出来,把每个字母变成十进制。转换好的十进制数乘权值,相加,成一个新的十进制串。

代码:
int cha(char a){
	if(a=='A')	return 10;
	if(a=='B')	return 11;
	if(a=='C')	return 12;
	if(a=='D')	return 13;
	if(a=='E')	return 14;
	if(a=='F')	return 15;
	return int(a-'0');
}
for(int i=0;i<=s.size()-1;i++){
	n+=cha(s[i])*x;
	x*=s1;
}

2.把十进制数转为目标进制串:

分离数位,把每位数字转换目标进制,定义一个空字符串,把每个字符相加成串。

代码:

int ahc(int a){
	if(a==15)	return 'F';
	if(a==14)	return 'E';
	if(a==13)	return 'D';
	if(a==12)	return 'C';
	if(a==11)	return 'B';
	if(a==10)	return 'A';
	return char(a+'0');
}
while(n){
	ans+=ahc(n%s2);
	n/=s2;
}

 最后,输出(就不多讲了)

AC代码

#include<bits/stdc++.h>//万能头文件
using namespace std;
int cha(char a){//字母->数字
	if(a=='A')	return 10;//特判
	if(a=='B')	return 11;
	if(a=='C')	return 12;
	if(a=='D')	return 13;
	if(a=='E')	return 14;
	if(a=='F')	return 15;
	return int(a-'0');//一般情况
}
int ahc(int a){//数字->字母
	if(a==15)	return 'F';//特判
	if(a==14)	return 'E';
	if(a==13)	return 'D';
	if(a==12)	return 'C';
	if(a==11)	return 'B';
	if(a==10)	return 'A';
	return char(a+'0');//一般情况
}
int main() {
	long long i,n=0,s1,s2,x=1;
	string s,ans="",res="";
	cin>>s1>>s>>s2;
	for(int i=0;i<=s.size()-1;i++){
		n+=cha(s[i])*x;
		x*=s1;
	}
	while(n){
		ans+=ahc(n%s2);
		n/=s2;
	}
	cout<<res;//输出
	return 0;
}

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值