编程练习之栈篇:进制转换
来源:互联网 发布:php画三角形星星 编辑:程序博客网 时间:2024/06/09 18:19
编程练习之栈篇:进制转换
进制转换
本篇所讲的进制转换是指:输入一个十进制数字,将十进制的数值转换为二进制、八进制、十六进制,并输出
思路解析:
将十进制转换为其他进制的思路为:将十进制数值不断的用其他进制取余,并将余数从低到高排列。
以十进制转二进制为例:要转换的数为17,对2取余如下:
根据箭头方向,从下到上读取,得出二进制结果为:10001。
上述的计算余数的方式,想必上过小学的朋友都做过吧~。以上计算余数的过程,我们可以简单的整理为以下基本原理:N=( N div d) X d + N mod d (其中,N为十进制数,d为要转换的d进制,div代表整除运算,注意是整除,mod代表取余),我们可以将过程写为以下形式:
现在,我们需要编写一个这样的程序,对于输入的任意非负十进制整数,转换为二进制、八进制、十六进制。通过以上计算我们可以看出,低位总是最先计算出来,最后才是高位数字,而我们写数字的时候,总是从高位到低位,依次写下,与我们的计算过程相反。所以,在这一块为了我们能够比较方便直观的将数据计算并打印出来,我们需要一种先计算出来的数最后才打印的存储方式,而栈恰恰满足了这一点,不要忘记:栈是一种“先进后出”的数据结构,因而,如果我们根据计算过程将计算出来的数字存入栈中,在需要的时候再将栈打印出来,不就正好满足了我们计算进制的需求??(数据结构之栈)
代码实现
在这块,我们需要注意的是:十进制转换为二进制和八进制容易,直接用整型数据表示即可,但是,十六进制却是有字符串形式的,因此,在输出中我们需要做特殊的处理才好:
我们提前定义一个满足十六进制的字符数组:char output[] = “0123456789ABCDEF”;在输出时,用该数组替换栈中数据即可。
//learning C++ by erMao#include <iostream>#include <stack>#include <cstdlib>using namespace std;#define BINARY 2#define OCTONARY 8#define HEXADECIMAL 16void changeMod(int num, int mod); //计算进制的函数int main(){ int number; cout << "请输入要转换的数字:" << endl; cin >> number; //将数字转化为2进制 changeMod(number, BINARY); //将数字转化为8进制 changeMod(number, OCTONARY); //将数字转化为16进制 changeMod(number, HEXADECIMAL); return 0;}void changeMod(int num, int mod) { stack<int> *pt = new stack<int>; //定义栈指针并分配空间 char output[] = "0123456789ABCDEF"; int res = 0; while (num != 0) { res = num % mod; pt->push(res); num /= mod; } while (!pt->empty()) { //遍历输出结果 cout << output[pt->top()]; pt->pop(); } cout << endl; delete pt; //释放空间}
关于栈的介绍点这里:数据结构之栈
- 编程练习之栈篇:进制转换
- 编程练习——进制转换
- javascript小练习之进制转换
- 编程练习:M,N进制任意转换
- 进制转换练习
- 编程练习:网址转换
- 栈的练习,进制转换!
- 【栈与队列】SDUT练习2—数据结构实验之栈一:进制转换
- 编程练习之整数
- Java程序练习-进制转换
- 练习:进制转换(2012.2.18)
- JAVA小练习-进制转换1
- JAVA小练习-进制转换2
- Java中的进制转换,练习
- 第十周练习 1009 进制转换
- 基础练习——进制转换
- 黑马程序员——进制转换巩固练习之c语言实现
- java基础学习记录之利用数组进行进制转换的学习与练习五
- SpringMVC 产生XML视图和JSON视图
- 从源码开始制作deb包
- Android上传图片到服务器并显示(后台用Java处理)
- HttpURLConnection 请求webservice出现错误
- github基础
- 编程练习之栈篇:进制转换
- 生成对抗网络(GANs)的资料小结,另附:资源|17类对抗网络经典论文及开源代码(附源码)
- spring cloud之zuul路由网关(六)
- 导出Excel
- 知识点累计
- 树的遍历及应用
- Android View的工作流程
- [JZOJ2784][BZOJ2434]【NOI2011】阿狸的打字机
- 一.Zookeeper三节点集群环境搭建(centOS)