问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

【数学&代码】进制转换详解

创作时间:
作者:
@小白创作中心

【数学&代码】进制转换详解

引用
CSDN
1.
https://blog.csdn.net/yangyanbin_sam/article/details/140051147

进制转换是计算机科学和数学中的一个基础话题,涉及到不同数制之间的相互转换。本文将详细介绍十进制与k进制之间的转换方法,包括数学原理和C++代码实现。

最常见的几种进制有:二进制、八进制、十进制、十六进制。

1. 十进制转k进制

十进制转k进制十分常用,方法:除k取余法(整数)和乘k取整法(小数)。

先看例子(用n(k)表示k进制数n):

将56(10)转换成二进制数。

利用短除法,再将余数由下至上排列,得出56(10)=111000(2)。

以上是整数的进制转换,小数的如下:

将小数部分乘k,得到整数部分,一直乘到小数部分为0,再按从上至下排列。

接下来就是用程序实现。

这里用一个自定义函数:

string jin_zhi_zhuan_huan(int n,int k)//将十进制数n转换成k进制。 
{
    
}

然后,由于要除到这个数变成0,要用while()循环。定义一个变量:a(n转换后的数),由于0难以保存,所以要用字符串。

string jin_zhi_zhuan_huan(int n,int k)//将十进制数n转换成k进制。 
{
    string a;
    while(n)//n不等于0。 
    {
        
    }
}

然后就开始处理:

string jin_zhi_zhuan_huan(int n,int k)//将十进制数n转换成k进制。 
{
    string a;
    while(n)//n不等于0。 
    {
        a+=n%k+'0';
        n=n/k;
    }
}

由于出来的a是由上至下顺序的,所以还要转变顺序

string jin_zhi_zhuan_huan(int n,int k)//将十进制数n转换成k进制。 
{
    string a;
    while(n)//n不等于0。 
    {
        a+=n%k+'0';
        n=n/k;
    }
    string s;
    int l=a.size();
    for(int i=l-1;i>=0;i--)
    {
        s+=a[i];
    }
    return s;
}

完整代码:

#include<bits/stdc++.h>
using namespace std;
string jin_zhi_zhuan_huan(int n,int k)//将十进制数n转换成k进制。 
{
    string a;
    while(n)//n不等于0。 
    {
        a+=n%k+'0';
        n=n/k;
    }
    string s;
    int l=a.size();
    for(int i=l-1;i>=0;i--)
    {
        s+=a[i];
    }
    return s;
}
int main()
{
    int n,k;
    cin>>n>>k;
    cout<<jin_zhi_zhuan_huan(n,k);
    return 0;
}

2. k进制转十进制

乘k的n次方,如下:

123(5)=1×5×5 +2×5 +3×1=25+10+3=38(10)

代码:

#include<bits/stdc++.h>
using namespace std;
int jin_zhi_zhuan_huan(int n,int k)//将k进制数n转换成十进制。 
{
    int a=1,s=0;
    while(n)
    {
        s+=n%10*a;
        a=a*k;
        n=n/10;
    }
    return s;
}
int main()
{
    int n,k;
    cin>>n>>k;
    cout<<jin_zhi_zhuan_huan(n,k);
    return 0;
}

对于n进制转m进制的问题,可以采用两步转换法:首先将n进制转换为十进制,然后再将十进制转换为m进制。虽然这种方法不是最高效的,但对于初学者来说易于理解和实现。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号