题目描述
请你编一程序实现两种不同进制之间的数据转换。
输入格式
共三行,第一行是一个正整数,表示需要转换的数的进制 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;
}