利用顺序栈将10进制数转换为16进制数
进制转换的方法:循环相除取余数。
对于10进制转换为16进制,设10进制数为n, 循环除以16,每次取出余数并保存。注意,由于16进制数可能会包含字母,因此要余数先转化为字符型,再存入栈中。
// 十进制转换为十六进制
void change10To16(int x) {
seqStack S;//定义一个栈
initialStack(S);//初始化
int mod;//余数
elementType charMod;//字符型
while (x != 0) {
mod = x % 16;
if (mod >= 10 && mod < 16) {
charMod = (char)(mod - 10 + 65);
}
else {
charMod = (char)(mod + 48);
}
pushStack(S, charMod);
x = x / 16;
}
elementType n;
cout << "转换后的十六进制是:";
while (S.top != -1) {
popStack(S, n);
cout << n;
}
cout << endl;
}
方法二 借助数组来打印16进制的数
void Dec2Hex(int N)
{
seqStack S;
initialStack(S);
int Mod,x;
//定义一个字符型的数组,取余得到的数为数组下标
char Hex[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
while(N!=0)
{
Mod=N % 16; //除16取余数到Mod
push(S,Mod); //余数入栈
N=N/16; //除16取商,存入N
}
//以下为出栈输出8进制数
cout<<"16进制数为:";
while(!stackEmpty(S))
{
getTop(S,x); //取栈顶元素到入x
cout<<Hex[x];
pop(S,x); //栈顶元素出栈
}
}
利用顺序栈将10进制数转换为8进制数
void change10To8(int N)
{
seqStack S;
int Mod,x;
initialStack(S);
while(N!=0)
{
Mod=N % 8; //除8取余数到Mod
push(S,Mod); //余数入栈
N=N/8; //除8取商,存入N
}
//以下为出栈输出8进制数
cout<<"八进制数为:";
while(!stackEmpty(S))
{
getTop(S,x); //取栈顶元素到x
cout<<x;
pop(S,x); //栈顶元素出栈
}
}