A conversão de números inteiros, na base 10, para outras bases numéricas se dá através de sucessivas divisões de um dado valor n pelo valor da base na qual se queira converter. Faça um programa para obter a conversão numérica, de acordo com a opção do usuário, utilizando a uma pilha:
Decimal para Octal.

Passo 1

O exercício pede um programa em C que leia um número inteiro em base 10 e o converta para base 8 (octal) usando uma pilha. Vamos usar a definição de pilha (LIFO) para armazenar os restos das divisões sucessivas do número por 8 e depois desempilhar para formar o número octal na ordem correta.

Passo 2

Primeiro, criamos uma pilha estática (vetor) e controle de topo. Precisamos de funções push (empilhar) e pop (desempilhar) para manipular a pilha.
No algoritmo de conversão, enquanto o número for maior que zero fazemos: calcular resto = número % 8, empilhar esse resto, dividir número por 8 (n = n/8).

Passo 3

Após encher a pilha com todos os restos, desempilhamos até a pilha ficar vazia, imprimindo cada valor. Esse será o dígito octal, do mais significativo ao menos significativo.
Trate o caso especial em que o número inicial seja zero: nesse caso o resultado em octal também é “0”.

Resposta

#include <stdio.h>
#define MAX 100
void push(int stack[], int *top, int value) {
stack[++(*top)] = value;
}
int pop(int stack[], int *top) {
return stack[(*top)–];
}
int main() {
int num, top = -1;
int stack[MAX];
printf("Digite um numero decimal: ");
scanf("%d", &num);

if (num == 0) {
    printf("0\n");
    return 0;
}

// Empilha os restos das divisões por 8
while (num > 0) {
    push(stack, &top, num % 8);
    num /= 8;
}

// Desempilha e imprime os dígitos octais
printf("Octal: ");
while (top >= 0) {
    printf("%d", pop(stack, &top));
}
printf("\n");

return 0;
}

Exercícios relacionados