Bootstrap

洛谷【P1143 进制转换】题解

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

输入格式:
共三行,第一行是一个正整数,表示需要转换的数的进制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;
}
;