测试链接
总时间限制: 1000ms 内存限制: 65536kB
描述
求任意两个不同进制非负整数的转换(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)。
样例输入
15 Aab3 7
样例输出
210306
#include<bits/stdc++.h>
using namespace std;
long long ans;
int main(){
char str[1005];
int a,b,n,len;
while(scanf("%d %s %d",&a,&str,&b)!=EOF){
len=strlen(str);
int q=1;
for(int i=len-1;i>=0;i--)
{
if(str[i]>='a'&&str[i]<='f')
n=str[i]-'a'+10;
else if(str[i]>='A'&&str[i]<='F')
n=str[i]-'A'+10;
else
n=str[i]-'0';
ans+=q*n;
q*=a;
}
int i=0,Num[50];
do
{
Num[++i]=ans%b;
ans/=b;
}while(ans!=0);
if(i==0)
{
cout<<0;
return 0;
}
for(int j=i;j>=1;j--)
{
if(Num[j]>9)
cout<<(char)(Num[j]-10+'A');
else
cout<<Num[j];
}
}
return 0;
}