进制转换
清华大学/厦门大学机试题
题目描述
Time Limit: 1000 ms
Memory Limit: 256 mb
将M进制的数X转换为N进制的数输出。
输入输出格式
输入描述:
输入的第一行包括两个整数:M和N(2<=M,N<=36)。 下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出。
输出描述:
输出X的N进制表示的数。
输入输出样例
输入样例#:
10 2 11
输出样例#:
1011
提示
注意输入时如有字母,则字母为大写,输出时如有字母,则字母为小写。
解题方法
思路
把m进制转10进制,再把10进制转n进制
代码
#include <bits/stdc++.h>
using namespace std;
long long toTen(int m,string s){
long long res = 0;
for(int i=0;i<s.size();i++){
res*=m;
if(s[i]>='0'&&s[i]<='9'){
res += (s[i]-'0');
}else{
res += (s[i]-'A'+10);
}
}
return res;
}
string toN(long long x,int N){
string res = "";
long long y;
while(x){
y = x%N;
if(y<10){
res.insert(res.size(),to_string(y));
}else{
string s= ""+ (y-10+'a');
res.insert(res.size(),s);
}
x/=N;
}
reverse(res.begin(),res.end());
return res;
}
int main(){
int m,n;
while(cin>>m>>n){
if(m!=10){
string x;
cin>>x;
long long tenX = toTen(m,x);
if(n==10){
cout<<tenX<<endl;
continue;
}
cout<<toN(tenX,n)<<endl;
}else{
int x;
cin>>x;
cout<<toN(x,n)<<endl;
}
}
return 0;
}