您的位置:首页 > 编程语言 > C语言/C++

c++实现的任意进制数转十进制数算法

2015-12-06 01:50 701 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: