#include <iostream>
#include <cctype>
using namespace std;
int pow(int a,int b)
{
int ans=1;
while(b--)
ans*=a;
return ans;
}
int radix1(string &a,int n)
{
int ans=0;
for(int i=0;a[i];i++)
{
if(isdigit(a[i])) ans=ans*n+a[i]-'0';
else if(isupper(a[i])) ans=ans*n+a[i]-'A'+10+1;
else if(islower(a[i])) ans=ans*n+a[i]-'a'+10+26+1;
}
return ans;
}
int radix2(string &a,int n)
{
int ans=0,ans0,len=a.size();
for(int i=len-1;i>=0;i--)
{
if(isdigit(a[i])) ans0=a[i]-'0';
else if(isupper(a[i])) ans0=a[i]-'A'+10+1;
else if(islower(a[i])) ans0=a[i]-'a'+10+26+1;
ans+=ans0*pow(n,len-i-1);
}
return ans;
}
void welcome()
{
cout<<"\t\t\t\t测试进制转换"<<endl;
cout<<"\t\t\t\t\t\tBy:sdk2 QQ:469656392"<<endl<<endl<<endl;
}
int main()
{
welcome();
while(1)
{
int n;
cout<<"输入进制(n≤62) ";
cin>>n;
cout<<"\t"<<"输入一个"<<n<<"进制的数 ";
string a;
cin>>a;
cout<<"\t"<<"该数等于十进制的 "<<endl;;
cout<<"\t"<<radix1(a,n)<<" (算法1)"<<endl;
cout<<"\t"<<radix2(a,n)<<" (算法2)"<<endl<<endl<<endl;
}
return 0;
}