#include <bits/stdc++.h>
using namespace std;
string str;
int changshi(char a)
{
if(a=='A')return 10;
if(a=='B')return 11;
if(a=='C')return 12;
if(a=='D')return 13;
if(a=='E')return 14;
if(a=='F')return 15;
return (int)(a-'0');
}
char change(int a)
{
if(a==10)return 'A';
if(a==11)return 'B';
if(a==12)return 'C';
if(a==13)return 'D';
if(a==14)return 'E';
if(a==15)return 'F';
return (char)(a+'0');
}
int main()
{
cin>>n>>str>>m; //n当前进制,m目标进制
int s=0;
int k=1;
for(int i=str.size()-1;i>=0;i--)
{
s+=changshi(str[i])*k;
k*=n;
}
string ans;
while(s)
{
ans=change(s%m)+ans;//注意顺序
s/=m;
}
cout<<ans;
return 0;
}
另外一个标准版本
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
int main() {
int a,b;
char str[40];
while(scanf("%d%s%d",&a,&str,&b)!=EOF) {
int tmp=0,lenth=strlen(str),c=1;
for(int i=lenth-1; i>=0; i--) {//转换为10进制
int x;
if(str[i]>='0'&&str[i]<='9') {
x=str[i]-'0';
} else if(str[i]>='a'&&str[i]<='z') {
x=str[i]-'a'+10;
} else {
x=str[i]-'a'+10;
}
tmp+=x*c;
c*=a;
}
char ans[40],size=0;
while(tmp) {
int x=tmp%b;
ans[size++]=(x<10)?x+'0':x-10+'A';//转换为字符
tmp/=b;
}
for(int i=size-1; i>=0; i--) {
printf("%c",ans[i]);
}
printf("\n");
}
return 0;
}
10
9999999
16
98967F (答案)