⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zp1352_highprecision.cpp

📁 一个acm题目系统会自动删除debug和release目录
💻 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 + -