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

#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;
}





    原文作者:进制转换
    原文地址: https://blog.csdn.net/code_sdk2/article/details/50191573
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞