利用顺序栈或链栈,将一个十进制数n转换为d进制数(d=2~16)并应用,计算十进制487的二进制数、八进制数和十六进制分别是多少?
提示:将十进制数转换为d进制数,可以采用除d取余法。
typedef struct {
string items[STACKSIZE];
int top;
}SqStack;
int Push(SqStack* S, string e) //入栈
{
if (S->top >= STACKSIZE - 1) {
printf("堆栈已满,不能完成入栈操作!\n");
return 0;
}
S->top++;
S->items[S->top] = e;
return 0;
}
int Pop(SqStack* S, string &e) //出栈
{
if (S->top <= -1) {
printf("堆栈已空,不能完成出栈操作!\n");
return 0;
}
e = S->items[S->top];
S->top--;
return 0;
}
int trans(int num, int d, SqStack* S) //转换
{
int a;
string b;
do
{
a = num % d; //d进制,除d取余法
num = (num - a) / d;
switch (a) //将余数转换为0,1,…,A,B,C…,将其入栈
{
case 0:
Push(S, "0");
break;
case 1:
Push(S, "1");
break;
case 2:
Push(S, "2");
break;
case 3:
Push(S, "3");
break;
case 4:
Push(S, "4");
break;
case 5:
Push(S, "5");
break;
case 6:
Push(S, "6");
break;
case 7:
Push(S, "7");
break;
case 8:
Push(S, "8");
break;
case 9:
Push(S, "9");
break;
case 10:
Push(S, "A");
break;
case 11:
Push(S, "B");
break;
case 12:
Push(S, "C");
break;
case 13:
Push(S, "D");
break;
case 14:
Push(S, "E");
break;
case 15:
Push(S, "F");
break;
}
} while (num != 0);
while (S->top != -1) //完成后出栈
{
Pop(S, b);
cout << b << " ";
}
return 0;
}
int main()
{
SqStack shun;
SqStack* S=&shun;
S->top = -1;
cout << "输入十进制数" << endl;
int num;
cin>>num;
cout << "输入转化的进制数" << endl;
int d;
cin >> d;
trans(num, d, S);
return 0;
}
运行结果: