进制转换3

120 阅读1分钟

题目描述

将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。

  • 这些细节都体现着进制转换的过程。所以,在写代码时,若搞不清,不妨先手写一遍进制转换,再写代码,就会较为清晰!