📄 zp1352_highprecision.cpp
字号:
//---------------------------------------------------------------------------
//#pragma hdrstop
//---------------------------------------------------------------------------
//#pragma argsused
//#decine cin cin
//#decine cout cout
//#include <fstream>
//ifstream cin("problemd.in");
//ofstream cout("output.txt");
#include <iostream>
#include <string>
using namespace std;
const int mx=200;
int w[mx],r[mx],v[mx];
int p,q,l,a,b;
string st;
int conv(char ss)
{
if (ss>='0' && ss<='9') return ss-'0';
if (ss>='A' && ss<='Z') return ss-'A'+10;
if (ss>='a' && ss<='z') return ss-'a'+36;
return 0;
}
char conb(int nn)
{
if (nn>=0 && nn<=9) return nn+'0';
if (nn>=10 && nn<=35) return nn+'A'-10;
if (nn>=36 && nn<=61) return nn+'a'-36;
return 0;
}
void getins()
{
cin>>a>>b;
cin>>st;
l=st.length();
r[0]=0;
for (int i=1;i<=l;i++)
r[i]=conv(st[l-i]);
}
void getouts()
{
cout<<a<<' '<<st<<endl<<b<<' ';
for (int i=1;i<=p;i++)
cout<<conb(w[p-i+1]);
cout<<endl<<endl;
}
void btos()
{
p=0;
while (l>0)
{
for (int i=l;i>0;i--)
{
r[i-1]+=(r[i]%b)*a;
r[i]/=b;
}
w[++p]=r[0]/a;
r[0]=0;
//while (r[l]==0 && l>0) l--;
if (r[l]==0) l--;
}
}
void stob()
{
int i,j,k;
for (k=1;k<=l;k++)
{
memset(v,0,sizeof(int)*mx);
v[1]=r[k];
q=1;
for (i=1;i<k;i++)
{
for(j=1;j<=q;j++)
v[j]*=a;
for(j=1;j<=q;j++)
if (v[j]>=b)
{
v[j+1]+=v[j]/b;
v[j]%=b;
if (j==q) q++;
}
}
if (q>p) p=q;
for (j=1;j<=p;j++)
w[j]+=v[j];
for(j=1;j<=q;j++)
if (w[j]>=b)
{
w[j+1]+=w[j]/b;
w[j]%=b;
if (j==p) p++;
}
}
}
int main(int argc, char* argv[])
{
int N;
cin>>N;
for(int I=0;I<N;I++)
{
memset(r,0,sizeof(int)*mx);
memset(w,0,sizeof(int)*mx);
memset(v,0,sizeof(int)*mx);
p=0;q=0;
getins();
if (a==b)
{
p=l;
for (int i=1;i<=l;i++)
w[i]=r[i];
}
else
if (a>b)
btos();
else
stob();
getouts();
}
return 0;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -