#include<iostream>
#include<stack>
#include<cstring>
#include<cmath>
using namespace std;
int pre,nxt;
char s[1010011];
int a[1010011];
void work()
{
// string -> number
int len=strlen(s);
for(int i=0;i<len;++i)//转换为十进制
{
if(s[i]>='0'&&s[i]<='9') a[len-i]=s[i]-'0';
if(s[i]>='A'&&s[i]<='Z') a[len-i]=s[i]-'A'+10;
if(s[i]>='a'&&s[i]<='z') a[len-i]=s[i]-'a'+36;
}
stack<char>sta;
while(len)
{
int x=0;
for(int i=len;i>=1;--i)//核心代码,高精除低精(除nxt)
{
int b=(x*pre+a[i])/nxt;
x=(x*pre+a[i])%nxt;
a[i]=b;
}
while(!a[len]&&len>=1) --len;//去除前导零
//转换为需要的进制
if(x>=0&&x<=9) sta.push((char)(x+'0'));
if(x>=10&&x<=35) sta.push((char)(x-10+'A'));
if(x>=36&&x<=61) sta.push((char)(x-36+'a'));
}
while(!sta.empty()) {//打印
cout<<sta.top();
sta.pop();
}
return;
}
int main()
{
int T; cin >> T;
while(T--)
{
scanf("%d%d%s",&pre,&nxt,s);//输入进制、输出进制、输入的值
printf("%d %s\n",pre,s);
printf("%d ",nxt);
work();
cout<<"\n\n";
}
return 0;
}
各进制转换
最新推荐文章于 2024-09-27 11:26:03 发布