题意:
实现一个高精度数的进制转换。
分析:
discuss里找到的精妙简洁模板。
代码:
#include <iostream>
using namespace std;
const int maxN=600;
char ori[maxN],ans[maxN];
int t[maxN],A[maxN];
int main()
{
int cases,a,b;
scanf("%d",&cases);
while(cases--){
scanf("%d%d%s",&a,&b,ori);
int k,i,l;
k=strlen(ori);
for(i=k-1;i>=0;--i) t[k-1-i]=ori[i]-(ori[i]<58?48:ori[i]<97?55:61);
for(l=0;k;){
for(i=k-1;i>0;--i){
t[i-1]+=t[i]%b*a;
t[i]/=b;
}
A[l++]=t[0]%b;
t[0]/=b;
for(;k>0&&!t[k-1];--k);
}
for(ans[l]=i=0;i<l;++i) ans[l-1-i]=A[i]+(A[i]<10?48:A[i]<36?55:61);
printf("%d %s\n%d %s\n\n",a,ori,b,ans);
}
return 0;
}