将十进制数N转换为八进制数。对于键盘输入的任意一个非负的十进制整数,打印输出与其等值的八进制数。 十进制数N转换为d进制数,基于如下原理:即除d取余法。例如:(1348)10=(2504)8 N N div 8 N mod 8 1348 168 4 168 21 0 21 2 5 2 0 2 由于上述的计算过程是从低位到高位顺序产生的八进制数的各个数位。而打印输出时,应从高位到低位进行,恰好和计算过程相反。因此可以先将计算过程中得到的八进制数的各个位进栈,待相对应的八进制数的各位均产生以后,再使其按顺序出栈,并打印输出。即得到了与输入的十进制数相对应的八进制数。根据描述用C语言编写程序
时间: 2023-06-24 22:05:42 浏览: 78
```
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 20
typedef struct stack {
int data[STACK_SIZE];
int top;
} Stack;
void init(Stack *s) {
s->top = -1;
}
int is_empty(Stack *s) {
return s->top == -1;
}
int is_full(Stack *s) {
return s->top == STACK_SIZE - 1;
}
void push(Stack *s, int x) {
if (is_full(s)) {
printf("Stack overflow\n");
exit(1);
}
s->data[++s->top] = x;
}
int pop(Stack *s) {
if (is_empty(s)) {
printf("Stack underflow\n");
exit(1);
}
return s->data[s->top--];
}
int main() {
int n, rem;
Stack s;
init(&s);
printf("Enter a decimal number: ");
scanf("%d", &n);
if (n == 0) {
printf("0\n");
return 0;
}
while (n != 0) {
rem = n % 8;
push(&s, rem);
n /= 8;
}
printf("Octal equivalent: ");
while (!is_empty(&s)) {
printf("%d", pop(&s));
}
printf("\n");
return 0;
}
```