zoukankan      html  css  js  c++  java
  • 模拟:进制转换

    首先我们介绍十进制转m进制,使用除m取余法,注意这里所描述的都是整数之间的转换,,不涉及小数部分所谓的乘m取整法

    为了便于显示结果,我们这里引入了一个字符串翻转函数

    char* strrev(char* s)
    {
        char* h=s;
        char* t=s;
        while(*t++);
        t-=2;
        while(h<t)
        {
            char ch=*h;
            *h++=*t;
            *t--=ch;
        }
        return s;
    }

    我们使用b数组来存放没一个数对应的字符,不用打表

    void init()
    {
        for(int i=0;i<=9;i++)
            b[i]=char(i+'0');
        for(int i=10;i<=15;i++)
            b[i]=char(i+55);
    }

    核心逻辑很简单:

        while(n)
        {
            a[cnt++]=b[n%m];
            n/=m;
        }

    接下来给出10进制转m进制的完整实现:

     1 #include<iostream>
     2 #include<cstring>
     3 using namespace std;
     4 int n,m;
     5 char a[15];
     6 char b[20];
     7 char* strrev(char* s)
     8 {
     9     char* h=s;
    10     char* t=s;
    11     while(*t++);
    12     t-=2;
    13     while(h<t)
    14     {
    15         char ch=*h;
    16         *h++=*t;
    17         *t--=ch;
    18     }
    19     return s;
    20 }
    21 void init()
    22 {
    23     for(int i=0;i<=9;i++)
    24         b[i]=char(i+'0');
    25     for(int i=10;i<=15;i++)
    26         b[i]=char(i+55);
    27 }
    28 int main()
    29 {
    30     init();
    31     cin>>n>>m;
    32     int cnt=0;
    33     while(n)
    34     {
    35         a[cnt++]=b[n%m];
    36         n/=m;
    37     }
    38     strrev(a);
    39     for(int i=0;i<cnt;i++)
    40         cout<<a[i];
    41     return 0;
    42 } 

    接下来我们介绍m进制转十进制,使用的方法是乘权累加法

    为了方便我们使用一个字符到对应数字的映射

    然后我们定义一个计算幂的函数

    int get_power(int x,int n)
    {
        int tmp=1;
        for(int i=1;i<=n;i++)
        {
            tmp*=x;
        }
        return tmp;
    }

    接下来,直接计算乘方之和就好了

    for(int i=0;i<len;i++)
            ans+=a[n[i]]*get_power(m,len-i-1);

    完整的实现如下:

     1 #include<iostream>
     2 #include<map>
     3 using namespace std;
     4 string n;
     5 int m;
     6 map<char,int> a;
     7 int ans=0;
     8 int get_power(int x,int n)
     9 {
    10     int tmp=1;
    11     for(int i=1;i<=n;i++)
    12     {
    13         tmp*=x;
    14     }
    15     return tmp;
    16 }
    17 void init()
    18 {
    19     for(int i=0;i<=9;i++)
    20         a[char(i+'0')]=i;
    21     for(int i=65;i<=70;i++)
    22         a[char(i)]=i-55;
    23 }
    24 int main()
    25 {
    26     init();
    27     cin>>n>>m;
    28     int len=n.size();
    29     for(int i=0;i<len;i++)
    30         ans+=a[n[i]]*get_power(m,len-i-1);
    31     cout<<ans<<endl;
    32     return 0;
    33 }
  • 相关阅读:
    重载操作符- 友元函数- 非/模板类重载
    静态成员变量
    函数指针的使用
    高斯消元_HihoCoderOffer6_03
    多重背包(MultPack = ZeroOnePack + CompletePack)
    高斯消元
    textbox文本键盘全选
    BASE64-客户端(js)加码-服务器端(c#)解码,URL传递“汉字参数”解决方法
    Jquery获取input=text 的值
    sql server 2008 不允许保存更改,您所做的更改要求删除并重新创建以下表 的解决办法
  • 原文地址:https://www.cnblogs.com/aininot260/p/9305626.html
Copyright © 2011-2022 走看看