栈的典型应用——逆序输出之进制转换(递归与迭代)
输入:十进制正数n
输出:任意的base进制数
算法原理:n = (dm…d2d1d0)(base) = dm*basem+…d0*base0
设ni = (dm…di+1di)(base)
则di = ni%base
ni+1 = ni/base
则得到所有di后逆序输出就可以得到其对应的base进制数
//递归实现
#include<iostream>
#include<stack>
using namespace std;
void convert(stack<char>& S,_int64 n,int base) {
static char digit[] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
if (0 < n) {
S.push(digit[n % base]);
convert(S, n / base, base);
}
}
//得到的目标数各位由低到高保存在栈中,将栈中元素输出即可
// 迭代实现
#include<iostream>
#include<stack>
using namespace std;
void convert(stack<char>& S, _int64 n, int base) {
static char digit[] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
while (0 < n) {
S.push(digit[(int)(n % base)]);
n /= base;
}
}