//十进制数n到base进值的转换 (递归)
void convert(Stack<char>& S, __int64 n, int base)
{
//0 < n, 1 < base <= 16,新进制下的数位符号,可视base取值范围适当扩充
static char digit[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B','C', 'D', 'E', 'F' };
if (0 < n)
{ //在尚有余数之前,不断
convert(S, n / base, base); //通过递归得到所有更高位
S.push(digit[n % base]); //输出低位
}
} //新进制下由高到低的各数位,自顶而下保存于栈S中
//尽管新进制下的各数位须按由低到高次序逐位算出,但只要引入一个栈并将算得的数位依次
//入栈,则在计算结束后只需通过反复的出栈操作即可由高到低地将其顺序输出
//十进制数n到base进值的转换(迭代版)
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 (n > 0) { //由低刡高,逐一计算出新进制下的各数位
int remainder = (int) (n % base);
S.push(digit[remainder]); //余数(当前位)入栈
n /= base; //n更新为其对base的除商
}
} //新进制下由高到低癿各数位,自顶而下保存于栈S中
十进制数n到base进值的转换
于 2022-02-18 14:56:57 首次发布