题目描述
将M进制的数X转换为N进制的数输出。
输入描述
输入的第一行包括两个整数:M和N(2<=M,N<=36)。 下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出。
输出描述
输出X的N进制表示的数。
示例
输入:
10 2
11
输出:
1011
思路
-
a进制转b进制,可以以10进制为桥梁。先a进制转10进制,再10进制转b进制。
-
a进制转10进制。对于字符数组中的每个字符,对a进行乘、加循环,判断是否是0到9字符,再将字符转换为数字。
-
10进制转b进制时,对b进行取模、除整循环,判断b进制是否大于10,从而调整输出字符是数字字符还是字母。
具体实现
#include<bits/stdc++.h>
using namespace std;
int main(){ //a进制转b进制。a先转十进制,再转b进制。
int a,b;
char n[100];
cin>>a>>b;
cin>>n;
//a进制转十进制
int ans=0;
for(int i=0; i<strlen(n); i++){
ans*=a;
if(n[i]>='0' &&n[i]<='9') ans += (n[i]-'0'); //字符转数字
else ans += (n[i]-'a')+10;
}
//cout<<ans<<endl;
//十进制转b进制
int k=0;
char e[100];
int cnt=0;
while(ans>0){
k=ans%b;
if(b<10) e[cnt++] = (k+'0'); //数字转字符
else e[cnt++] = (k-10)+'a';
ans/=b;
}
for(int i=cnt-1; i>=0; i--){
cout<<e[i];
}
return 0;
}
小结
-
题目不是很难,但是很多易错点还是想说一下。比如,在a进制转10进制时,ans乘的是a进制的进制数,在if判断时判断条件是是否是字符0到9。在10进制转b进制时,ans取模是取模的b进制的b,在if判断时判断条件是进制数b是否小于10。
-
这些细节都体现着进制转换的过程。所以,在写代码时,若搞不清,不妨先手写一遍进制转换,再写代码,就会较为清晰!