http://acm.pku.edu.cn/JudgeOnline/problem?id=1220
Код:
#include<iostream>
#include<cstring>
using namespace std;
char a[1000];
int s[1000];
int b[1000];
int n,m;
void setin(){
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
cin>>n>>m;
cin>>a;
cout<<n<<" "<<a<<endl;
cout<<m<<" ";
}
void solve(){
int l,i,j=0;
l=strlen(a);
for(i=0;i<l;i++){
if(a[i]>='0' && a[i]<='9')
s[i]=a[i]-'0';
else if(a[i]>='A' && a[i]<='Z')
s[i]=a[i]-'A'+10;
else if(a[i]>='a' && a[i]<='z')
s[i]=a[i]-'a'+36;
}
while(1){
int t=0;
for(i=0;i<l;i++){
if(s[i]!=0 && i<l-1){
s[i+1]+=(s[i]%m)*n;
s[i]=s[i]/m;
}
if(i==l-1) {
b[j++]=s[i]%m;
s[i]=s[i]/m;
}
}
for(i=0;i<l;i++)
if(s[i]!=0) {
t=1;
break;
}
if(t==0) break;
}
for(i=j-1;i>=0;i--){
if(b[i]>=0 && b[i]<=9)
cout<<(char)(b[i]+'0');
else if(b[i]>=10 && b[i]<=35)
cout<<(char)(b[i]+'A'-10);
else if(b[i]>=36 && b[i]<=61)
cout<<(char)(b[i]+'a'-36);
}
cout<<endl<<endl;;
}
int main(){
int round;
cin>>round;
while(round--){
setin();
solve();
}
return 0;
}