利用顺序栈将输入的非负的十进制数N转换为指定的d(二、八或十六)进制数。 顺序栈的定义如下: #define STACKSIZE 100 typedef int DataType; typedef struct { DataType items[STACKSIZE]; /*存放栈中元素的一维数组*/ int top; /*用来存放栈顶元素的下标*/ }SqStack;
时间: 2024-03-11 18:51:07 浏览: 87
好的,这是一个经典的进制转换问题,我们可以按照以下步骤进行转换:
1. 用N不断除以d,将余数存入顺序栈中,直到商为0为止;
2. 从栈顶开始弹出每个余数,转换为对应的进制位,得到最终结果。
具体实现代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define STACKSIZE 100
typedef int DataType;
typedef struct {
DataType items[STACKSIZE];
int top;
} SqStack;
void InitStack(SqStack *S) {
S->top = -1;
}
int StackEmpty(SqStack *S) {
return S->top == -1;
}
int StackFull(SqStack *S) {
return S->top == STACKSIZE - 1;
}
int Push(SqStack *S, DataType x) {
if (StackFull(S)) {
return 0;
}
S->items[++(S->top)] = x;
return 1;
}
int Pop(SqStack *S, DataType *x) {
if (StackEmpty(S)) {
return 0;
}
*x = S->items[(S->top)--];
return 1;
}
void conversion(int N, int d) {
SqStack S;
InitStack(&S);
while (N != 0) {
Push(&S, N % d);
N /= d;
}
while (!StackEmpty(&S)) {
int x;
Pop(&S, &x);
if (x < 10) {
printf("%d", x);
} else {
printf("%c", x - 10 + 'A');
}
}
}
int main() {
int N, d;
scanf("%d%d", &N, &d);
conversion(N, d);
return 0;
}
```
其中,InitStack、StackEmpty、StackFull、Push、Pop 函数分别用于初始化栈、判断栈是否为空、判断栈是否已满、入栈、出栈。conversion 函数用于将十进制数N转换为d进制数并输出。
阅读全文