poj1220进制转换,会了这题,基本上其他的高精度就差不多了。恢复功力,从基础开始……
#include<iostream>
#include<cstring>
using namespace std;
int tmp[1000],ans[1000],start[1000];
char s1[1000];
int p1,p2,len;
int turn()
{ int i;
len=strlen(s1);
for(i=1;i<=len;i++)
{
if(s1[len-i]<='9'&&s1[len-i]>='0')
start[i]=s1[len-i]-'0';
else if(s1[len-i]>='A'&&s1[len-i]<='Z')
start[i]=s1[len-i]-'A'+10;
else start[i]=s1[len-i]-'a'+36;
}
start[0]=len;
}
int solve(int a,int b)
{
memset(tmp,0,sizeof(tmp));
int i,j,yu;
while(start[0]>=1)
{
yu=0;
i=start[0];
ans[0]=start[0];
while(i>=1)
{
yu=yu*a+start[i];
ans[i--]=yu/b;
yu%=b;
}
tmp[++tmp[0]]=yu;
i=ans[0];
while(i>=1&&ans[i]==0)
{
i--;
ans[0]--;
}
memset(start,0,sizeof(start));
for(i=0;i<=ans[0];i++)
{
start[i]=ans[i];
}
memset(ans,0,sizeof(ans));
}
}
int output()
{
int i;
printf("%d ",p1);
printf("%s\n",s1);
printf("%d ",p2);
for(i=tmp[0];i>=1;i--)
{
if(tmp[i]>=10&&tmp[i]<36)
printf("%c",'A'+tmp[i]-10);
else if(tmp[i]>=36)
printf("%c",'a'+tmp[i]-36);
else
printf("%d",tmp[i]);
}
printf("\n");
return 0;
}
int main()
{ int cas;
scanf("%d",&cas);
while(cas--)
{
memset(start,0,sizeof(start));
memset(ans,0,sizeof(ans));
memset(tmp,0,sizeof(tmp));
memset(s1,'\0',sizeof(s1));
scanf("%d%d",&p1,&p2);
scanf("%s",s1);
turn();
solve(p1,p2);
output();
printf("\n");
}
system("pause");
return 0;
}