题目:
求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
不同进制的表示符号为(0,1,…,9,a,b,…,f)或者(0,1,…,9,A,B,…,F)。
输入格式:
输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。
输出格式:
可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,…,9,A,B,…,F)。
输入样例:
4 123 10
输出样例:
27
AC代码:
#include<iostream>
#include<string>
#include<math.h>
using namespace std;
int main(){
long long a,b;
string n;
int len=0;
while(scanf("%lld",&a)!=EOF){
cin>>n>>b;
string ans;
long long c=0;
string t;
len=n.length();
while(len>0){//先将a转成10进制
if(n[len-1]>='0'&&n[len-1]<='9'){
c+=(n[len-1]-'0')*pow(a,n.length()-len);
}
else if(n[len-1]>='a'&&n[len-1]<='f'){
c+=(n[len-1]-'a'+10)*pow(a,n.length()-len);
}
else if(n[len-1]>='A'&&n[len-1]<='F'){
c+=(n[len-1]-'A'+10)*pow(a,n.length()-len);
}
len--;
}
do{
if(c%b<10){
t=c%b+'0';
}
else{
t=c%b-10+'A';
}
c/=b;
ans=t+ans;
}while(c>0);
cout<<ans<<endl;
}
return 0;
}