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 }
  • 相关阅读:
    jquery animate()方法 语法
    jquery unload方法 语法
    jquery undelegate()方法 语法
    jquery unbind()方法 语法
    jquery trigger() 方法 语法
    jquery toggle()方法 语法
    jquery change() 函数 语法
    jquery blur()函数 语法
    jquery bind()方法 语法
    jquery checked选择器 语法
  • 原文地址:https://www.cnblogs.com/aininot260/p/9305626.html
Copyright © 2011-2022 走看看