题目描述:
请你编一程序实现两种不同进制之间的数据转换。输入格式:
共三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16)n(2≤n≤16),第二行是一个n进制数,若n>10n>10则用大写字母A-FA−F表示数码10-1510−15,并且该nn进制数对应的十进制的值不超过10000000001000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)m(2≤m≤16)。输出格式 :
一个正整数,表示转换之后的mm进制数。输入样例 :
16
FF
2
输出样例 :
11111111
【思路分析】:
主要思路是先将各进制的数转换成十进制,再通过十进制转换成其他各进制的数,详情见代码。
【代码实现】:
#include <bits/stdc++.h>
using namespace std;
int n,m;
char a[100];
int aa[100];
int ans[100];
int main(){
scanf("%d%s%d",&n,a,&m);
//将读入的数转换成整型
int l=strlen(a);
for(int i=0;i<l;i++){
if(int(a[i])>=65) aa[i]=int(a[i])-55;
else aa[i]=int(a[i])-48;
}
//转换成十进制数
int num=0,p=0;
for(int i=l-1;i>=0;i--){
num+=aa[i]*pow(n,p);
p++;
}
//转换成对应的进制数
int j=1;
while(num!=0){
ans[j++]=num%m;
num/=m;
}
for(j--;j>0;j--){
//考虑超过10进制的情况
if(ans[j]<10) cout<<ans[j];
else cout<<char(ans[j]+55);
}
return 0;
}