栈解决数制转换问题

xiaoxiao2021-02-28  57

众所周知,栈是一种先进后出的数据结构。

利用这一点,我们可以设计数制转换的算法。假设我们有一个十进制数m,要把它转换成2进制数s,通常我们采用辗转相除法。

举个例子,比如:10

10/2=5 ······················ 余数 05/2=2 ························· 余数 12/2=1 ························· 余数 01/2=0 ························· 余数 1

好,那么到此为止,转换就完成了。将余数从下往上排列得到10的二进制数1010


那么这种计算方式是不是就刚好跟我们栈相似呢?倘若我们把每次得到的余数都放到栈里面,那么第一步得到的余数是不是就沉在栈底,是不是就是最后一个才能出来的?那么就刚好符合从下往上的辗转相除法。

下面是伪代码:

//m为转换前的数,n为转换后的数的进制 void conversion(int m,int n){ //构造栈 InitStack(S); while(m){ //将余数压入栈中 Push(S,m%n); //将得到的商设置为下一轮的被除数 m=m/n; } //栈非空 while(!StackEmpty(S)){ int e; Pop(S,e); printf("%d",e); } }
转载请注明原文地址: https://www.6miu.com/read-77014.html

最新回复(0)