手把手教你实现进制转换(C++代码注释+小白友好教程)

贾蔷
• 阅读 9

一、简介和特点

进制转换是编程中常见的操作,即将数值从一种进制(如十进制)转换为另一种进制(如二进制、十六进制等)。本代码实现了一个通用的进制转换工具,具有以下特点:

1.支持小数转换:不仅能转换整数,还能处理小数部分的进制转换(如将0.25转换为二进制)。

2.灵活进制设定:用户可输入任意进制(2~36),代码通过字符[映射](https://www.xinaozhilu.cn/tags/42.html)自动处理超过10的数字(用字母A~Z表示)。

3.代码简洁高效:采用[迭代](https://www.xinaozhilu.cn/tags/5.html)[算法](https://www.xinaozhilu.cn/tags/11.html),避免[递归](https://www.xinaozhilu.cn/tags/2.html),适合新手理解底层逻辑。

二、与其他相比的优点

  1. 易于理解:相比复杂的位运算或库函数调用,本实现用基础数学逻辑(乘除法+取余)完成,小白也能看懂。

  2. 全面性:多数教程仅涉及整数转换,本代码完整处理小数部分,应用场景更广泛。

  3. 容错性强:对进制输入范围(2~36)进行隐式约束,超出范围会自动用字母表示,减少报错可能。

三、实现步骤

  1. 输入与拆分:用户输入数值和进制,将数值拆分为整数部分(dnum)和小数部分(fnum)。

  2. 整数转换:

    用除基取余法逆序生成每位数字(如十进制转二进制:123 → 123%2=1 → 61%2=1 → 30%2=0...)。

    若余数>10,用字符映射(A→10,B→11...)。

  3. 小数转换:

    乘基取整法:每次将小数部分乘以进制,取整数部分作为当前位(如0.252=0.5 → 取0,0.52=1 → 取1)。

    循环直至小数部分为0或达到精度限制。

  4. 拼接结果:将整数、小数点、小数部分逆序拼接,输出最终字符串

四、代码和注释

#include <iostream> // 输入输出流库
#include <string>   // 字符串处理库
using namespace std;

int main() {
    double num;      // 用户输入的待转换数值(支持小数)
    int jinzhi;      // 目标进制(2~36)
    cin >> num >> jinzhi; // 输入数值和进制

    int dnum;        // 整数部分
    double fnum;     // 小数部分
    dnum = (int)num; // 强制类型转换获取整数部分
    fnum = num - dnum; // 计算小数部分

    string newnum = ""; // 存储转换后的结果字符串

    // 处理整数部分(除基取余法)
    if (dnum == 0) // 特判:若整数部分为0,直接添加'0'
        newnum = newnum + '0';
    while (dnum > 0) {
        if (dnum % jinzhi < 10) // 余数在0~9范围内
            newnum = newnum + to_string(dnum % jinzhi); // 转为字符拼接
        else // 余数>10,用字母表示
            char tmp = 'a' + dnum % jinzhi - 10; // A对应10,B对应11...
            newnum = newnum + tmp;
        dnum /= jinzhi; // 继续处理下一位
    }
    reverse(newnum.begin(), newnum.end()); // 逆序排列整数位(因之前是逆序生成的)

    // 添加小数点
    newnum = newnum + '.';

    // 处理小数部分(乘基取整法)
    while (fnum*jinzhi-(int)fnum*jinzhi >= 0) { // 循环直至小数部分为0或精度问题
        double a = fnum * jinzhi; // 当前小数乘以进制
        if ((int)a < 10) // 整数部分在0~9
            newnum = newnum + to_string((int)a);
        else // 用字母表示
            char tmp = 'a' + (int)a - 10;
            newnum = newnum + tmp;
        if (fnum * jinzhi - (int)a == 0) // 特判:小数部分已为0,跳出循环
            break;
        fnum = fnum * jinzhi - (int)a; // 继续处理下一位小数
    }

    cout << newnum; // 输出结果

    return 0;
}

五、总结

本代码为进制转换提供了一个清晰、易懂的实现方案,尤其适合编程新手学习:

逻辑直观:通过基础数学运算(乘除、取余)完成转换,无需复杂算法。

实用性强:支持小数和自定义进制,可扩展至实际应用场景。

注释友好:每一步关键操作均附说明,帮助理解代码与算法关联。

建议新手在阅读代码时,结合实现步骤逐步调试,加深对进制转换原理的理解。

来源:手把手教你实现进制转换(C++代码注释+小白友好教程)

点赞
收藏
评论区
推荐文章
浅梦一笑 浅梦一笑
4年前
Python 练手 &quot;小例子&quot; 闯关60题!
一、数字1求绝对值绝对值或复数的模In1:abs(6)Out1:62进制转化十进制转换为二进制:In2:bin(10)Out2:'0b1010'十进制转换为八进制:In3:oct(9)Out3:'0o11'十进制转换为十六进制:In4:hex(15)Out4:'0xf'3整数和ASCII互
DaLongggggg DaLongggggg
4年前
python刷题-进制转换
十六进制转八进制问题描述  给定n个十六进制正整数,输出它们对应的八进制数。输入格式  输入的第一行为一个正整数n(1<n<10)。  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。输出格式  输出n行,每行为输入对应的八进制正整数。  【注意】  输入的十六进制数不会有
Wesley13 Wesley13
3年前
JS中二进制与十进制的相互转换
今天在做题目的时候遇到了需要十进制转换为二进制,这个我知道用toString可以,但是二进制转换为十进制我一下子就想不起来,网上搜了下,才知道是parseInt可以实现,特此记录下。十进制转换为二进制:varnum100;console.log(num.toString(2));toString()方法可把一个
Stella981 Stella981
3年前
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
↓2进制8进制10进制16进制2进制\bin(int(x,8))bin(int(x,10))bin(int(x,16))8进制oct(int(x,2))\oct(int(x,10))oct(int(x,16))10进制int(x,2)int(x,8)\int(x
Wesley13 Wesley13
3年前
C++ 进制转换 十进制十六进制八进制二进制相互转换
思路:1.下面我把相互转换的所有类型都写出来了。实际上都是通过十进制中转的,这样比较简单,写出X进制转成十进制和从十进制转成X进制的两份代码直接拷贝就完成了剩余的部分。哦,对,自己封装了一个charToDigit函数,主要是将字符转为数字用的。2.十六进制转十进制转八进制:!(https://images2018.cnblogs.c
Easter79 Easter79
3年前
StringFormatter,一个javascript编写的字符串格式化库
StringFormatterJS是一个js编写的可扩展的javascript字符串格式化库,它的功能远远超出了ECMA6标准所规定的字符串格式化规则。它的内置转换功能如下:1.字符串2.所有数值类型包括整数,小数,十六进制,八进制,百分比和金融符号以及对NaN和Infinity的特殊处理3.布尔型4.数组和对象
Wesley13 Wesley13
3年前
2.python内置数据结构
第一类:数值类型一.数值型包括1.int(整型):python3里数字不管多大永远都是int长整型,且没有大小限制,受限于内存区域的大小类型转换:int(x)返回一个整数2.float(浮点型):有整数部分和小数部分组成。支持十进制和科学计数法表示。只有双精度型类型转换:float(x)返回一个浮点数3.c
Wesley13 Wesley13
3年前
C#字符串格式化输出—C#基础回顾
2.10.cs/author:frankdatetime:201772011:19:34格式化字符串:C:本地货币格式D:十进制格式,把整数转换为以10为基数的数,如果给定一个精度说明符,就加上前导0E:科学计数法(指数)格式。精度说明符设置小数位数(默认为6)。格式字
Wesley13 Wesley13
3年前
C语言基础之ASCII编码(3)
什么是字符集和字符编码?前面我们已经讲到,计算机是以二进制的形式来存储数据的,它只认识0和1两个数字,我们在屏幕上看到的文字,在存储之前都被转换成了二进制(0和1序列),在显示时也要根据二进制找到对应的字符。可想而知,特定的文字必然对应着固定的二进制,否则在转换时将发生混乱。那么,怎样将文字与二进制对应起来
绣鸾 绣鸾
1年前
科学计算器Mac版PCalc
是一款全功能的科学计算器,它具有以下特点:支持十六进制、八进制和二进制计算,以及可选的RPN模式、括号、可编程函数和一组广泛的单位转换。科学家、工程师、学生、程序员或任何正在寻找功能丰富的计算器的人的强大选择。具有强大的菜单栏小部件,无需离开当前应用程序即