• (任意进制转换)将 r 进制数转成 k 进制数


    我们知道任意进制转换为十进制,都是乘以基数的多少次方,然后相加;

    十进制转换为任意进制,都是除以基数,然后倒着取余数;

    所以这里是用十进制数中转,实现任意进制数的转换

    #include<iostream>
    #include<algorithm>
    #include<math.h>
    #include<stack>
    #define ll long long
    #define M 0x3f3f3f3f3f
    using namespace std;
    
    ll change1(int r,string s)//r进制数转十进制数
    {
        ll len=0,ans=0;
        while(s.length()!=len)
        {
            ans=ans*r;
            if(s[len]>='A'&&s[len]<='Z')
                ans=ans+s[len]-'A'+10;
            else
                ans=ans+s[len]-'0';
            len++;
        }
        return ans;
    }
    
    
    void change2(int r,ll x)//将十进制数x转化成r进制数
    {
        stack<int>p;
        if(x==0)//特判0
            p.push(x);
        
        while(x)//x除以基数,然后倒着取余数,用栈恰好可以实现
        {
            p.push(x%r);
            x=x/r;
        }
        while(!p.empty())
        {
            switch(p.top())
            {
                case 10:cout<<'A';break;
                case 11:cout<<'B';break;
                case 12:cout<<'C';break;
                case 13:cout<<'D';break;
                case 14:cout<<'E';break;
                case 15:cout<<'F';break;//这些都是为了能转化为十六进制。还可以继续增加
                default:cout<<p.top();break;
            }
            p.pop();
        }
        cout<<endl;
    }
    
    void change3(int r,string s,int k)//将r进制数s转化成k进制数
    {
        ll temp=change1(r,s);
        change2(k,temp);
    }
    
    int main()
    {
        int r,k;
        string s;
        cin>>r>>k>>s;//将r进制数s转化成k进制数
        change3(r,s,k);
        return 0;
    }
  • 相关阅读:
    设计模式之策略模式、观察者模式浅析
    axis2_1.6.2之构建web端和客户端
    EJB3之查询
    qpid之简单实例
    ant1.9.4之编译、打包、发布、清理
    四数之和
    电话号码的字母的组合
    最接近的三数之和
    三数之和
    最长公共前缀
  • 原文地址:https://www.cnblogs.com/-citywall123/p/11740600.html
Copyright © 2020-2023  润新知