C++堆栈应用(一):数制转换
十进制N和其它进制数的转换是计算机实现计算的基本问题,其解决方法很多,其中一个简单算法基于下列原理: N=(n div d)*d+n mod d ( 其中:div为整除运算,mod为求余运算) 例如 (1348)10=(2504)8,其运算过程如下: 不难发现,最后得到的余数2在新的八进制数的最高位(第一位),而最先得到的余数4在新的八进制数的最低位(最后一位)。而我们一般读数是从最高位读起,所以比较简便的做法是将每次取余(mod)得到的余数存储在具有后进先出的特点的结构中,这样只需依次读出余数,便得到了相应的新数制的数。而堆栈刚好具有这样的特点。 使用堆栈进行数制转换的算法如下: void Conversion ( int n , int base ) { LinkStack * s ; s = InitStack ( ) ; int remainder ; while ( n != 0 ) { //进行求模运算,直到n为0时退出循环 remainder = n % base ; Push ( s , remainder ) ; n = n / base ; } while ( s - > next != NULL ) //依次弹出栈顶的元素,最终形成的数即为所求进制数 cout << Pop ( s ) ; cout << endl ; } 1.使用链栈实现数制转换的完整程序