进制转换c++代码_笃学不倦|实现任意进制转换代码及解析

本文介绍了如何实现任意进制之间的转换,重点讲解了数制转换的关键概念,如基数、权以及转换方法。通过实例分析了十六进制到其他进制的转换,并提供了程序设计思路,包括使用字符数组存储和转换函数。此外,还讨论了如何优化程序以处理多组输入数据。
摘要由CSDN通过智能技术生成

今天,小软先让同学看一个问题,通过这个问题,我们来学习今天的小知识——实现任意进制转换代码及解析。

3d96a169699c73d1596f8c7ccb91fb9f.png

问题

描述

给定一个 M 进制的数 x,实现对 x 向任意的一个非 M 进制的数的转换。

一起来分析一下吧: 掌握不同数制间的转换关系是解决问题的关键,这里所说的数制一般包括二进制、八进制、十六进制及十进制。除了不同的数制还有下面几个必须要了解的概念。 基数:在一种数制中,只能使用一组固定的数字来表示数的大小,这组固定的数字的个数就称为该计数制的基数(Base)。例如十进制的基数为10,二进制的基数为2等。 权:又称为位权或权值,即每一个数位都有一个固定的基值与之相对应,称之为权。如十进制的个位对应的权值为1(100),十位对应的权值为10(101),百位对应的权值为100(102)。对于一个 M 进制的数来说,小数点左边各位上对应的权值从右到左分别为基数的0次方、基数的1次方、基数的2次方等,对于小数点右边各位上对应的权值从左到右分别为基数的-1次方、基数的-2次方等。 二进制、八进制、十六进制向十进制转换:按权展开相加。 十进制转换成二进制、八进制、十六进制:整数部分除以基数取余数(取余的方向为从后向前);小数部分乘以基数取整数(取整的方向为从前向后)。 二进制、八进制、十六进制相互转换:先转换成十进制再转换成其他进制;或者按照其对应关系进行转换(三位二进制数对应一位八进制数,四位二进制数对应一位十六进制数)。本例题按照前一种转换方式进行编程。 接下来我们来看一下算法设计 十六进制是由 0~F 这一组固定的数字来表示,所以釆用字符数组进行存储。在进行输入输出时数组元素都是以字符的形式存在的,但是在进行数制转换时数组元素又以数值的形式存在,程序中用两个自定义函数 char_to_number 和 number_to_char 来实现字符与其对应数值之间的转换。 在执行程序时可以输入多组数据来验证程序的正确性,以前的程序都是多次运行,输入不同的数据来实现。对程序稍做改进,只运行一次程序但可以输入多组数据进行验证。解决这个问题只需要加一层循环,如果循环条件为真则继续输入数据,否则退出。循环条件为真即表达式的值不为0,这样可以声明一个变量假设为 flag,利用语句 while(flag){循环体} 来进行控制,当 flag 的值为1时可以接着输入,若为0则结束循环。  

完整代码

af8827dc9e6671680b8949b8f886df5e.png

运行结果

fd5ee8207a30c23d511979cc50f812f8.png

今天的内容到这里就结束了,下期我们不见不散哦。

01a786f2e266ecd83baa53433659028d.png f02c6c8a087538c8adc646b3dcd80862.gif

部分图片来源于网络

责任编辑:付子腾   毛丽颖

bcd1de9f0f3fb9e430ed4b15343f7920.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值