利用顺序栈将输入的非负的十进制数N转换为指定的d(二、八或十六)进制数。pta
时间: 2023-06-09 15:03:04 浏览: 282
进制转换算法原理(二进制 八进制 十进制 十六进制)
5星 · 资源好评率100%
好的,我知道你想要我回答这道题目。对于这道题目,我们可以采用除基取余法来解决。具体的做法如下:
1. 定义一个顺序栈,用来保存每次计算得到的余数。
2. 不断地将N除以d,每次将得到的余数压入栈中。
3. 当N小于d时,将N压入栈中。
4. 依次出栈并将每个元素转换为对应的字符,即可得到指定进制的数。
以下是代码实现:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int* data;
int top;
} Stack;
void initStack(Stack* s, int maxSize) {
s->data = (int*)malloc(sizeof(int) * maxSize);
s->top = -1;
}
int isEmpty(Stack* s) {
return s->top == -1;
}
int isFull(Stack* s, int maxSize) {
return s->top == maxSize - 1;
}
void push(Stack* s, int x) {
s->data[++s->top] = x;
}
int pop(Stack* s) {
return s->data[s->top--];
}
void convert(int N, int d) {
Stack s;
initStack(&s, 100);
while (N >= d) {
push(&s, N % d);
N /= d;
}
push(&s, N);
while (!isEmpty(&s)) {
int x = pop(&s);
if (x < 10) {
printf("%d", x);
} else {
printf("%c", x - 10 + 'A');
}
}
}
int main() {
int N, d;
scanf("%d%d", &N, &d);
convert(N, d);
return 0;
}
```
希望能够帮助到你!
阅读全文