#include<stdio.h>
#include<string.h>
int main(){
const char *s1="0123456789ABCDEF";
int R1, R2;
int temp=0, count=0;
long long sum=0;
char s[33];
char ans[33];
scanf("%d %s %d", &R1, &s, &R2);
for(int i=0; i<strlen(s); i++)
{
if(s[i]>='a' && s[i]<='z') temp=(int)s[i]-87;
else if(s[i]>='A' && s[i]<='Z') temp=(int)s[i]-55;
else temp=(int)s[i]-48;
sum = sum*R1+temp;
}
while(sum!=0)
{
ans[count++] = s1[sum%R2];
sum /= R2;
}
if(count==0) printf("%d", 0);
for(int i=0; i<count; i++)
{
printf("%c", ans[count-1-i]);
}
return 0;
}
该问题即两个不同进制(2-16)整数之间互相转换
利用常值字符数组s1来快速获得字母对应的十进制整数,得到目标对应的十进制整数sum,再用取余数的方法得到R2进制的答案并且存入ans数组中,逆向输出即可得到R2进制的整数