c++用栈实现十进制转换八进制
时间: 2023-08-24 11:06:02 浏览: 58
可以使用以下步骤来实现:
1. 将输入的十进制数字依次压入栈中;
2. 弹出栈顶数字,将其对8求余数并压入栈中;
3. 重复步骤2直到所有数字被转换为八进制;
4. 依次弹出栈中的数字,即可得到八进制表示。
代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
// 栈结构体
struct Stack {
int data[MAX_SIZE];
int top;
};
// 初始化栈
void initStack(struct Stack *s) {
s->top = -1;
}
// 判断栈是否满
int isFull(struct Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 判断栈是否空
int isEmpty(struct Stack *s) {
return s->top == -1;
}
// 入栈
void push(struct Stack *s, int x) {
if (isFull(s)) {
printf("Stack is full!\n");
exit(1);
}
s->data[++s->top] = x;
}
// 出栈
int pop(struct Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty!\n");
exit(1);
}
return s->data[s->top--];
}
// 十进制转八进制
int convert(int dec) {
struct Stack s;
initStack(&s);
// 将十进制数字依次压入栈中
while (dec) {
push(&s, dec % 8);
dec /= 8;
}
// 依次弹出栈中数字,即可得到八进制表示
int oct = 0, base = 1;
while (!isEmpty(&s)) {
oct += pop(&s) * base;
base *= 10;
}
return oct;
}
int main() {
int dec;
printf("Input a decimal number: ");
scanf("%d", &dec);
printf("%d(decimal) = %d(octal)\n", dec, convert(dec));
return 0;
}
```
当然,如果您需要更多的实现方式或代码细节,请联系 CSDN 开发的 ChitGPT。