题意:
实现一个高精度数的进制转换。
分析:
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;
}