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 Hexadecimal

Passo 1

Neste exercício, queremos criar um programa em C que converta um número inteiro (base 10) para hexadecimal (base 16) usando uma pilha. Precisamos entender o método de conversão por divisões sucessivas e como usar uma pilha para inverter a ordem dos restos.

Passo 2

A ideia teórica: para converter um número decimal para outra base B, repetimos divisões sucessivas por B, guardando cada resto. A sequência de restos, lida de trás para frente, forma a representação na base desejada. A pilha é perfeita para armazenar esses restos e depois desempilhá-los na ordem correta.

Passo 3

Modelo da pilha em C: usamos um array de caracteres para armazenar os dígitos gerados, junto com um índice “top” indicando o topo. Implementamos duas operações principais: push (colocar elemento no topo) e pop (remover elemento do topo).

Passo 4

Algoritmo de conversão: 1) Se o número for zero, imprimimos ‘0’. 2) Enquanto o número for maior que zero, calculamos o resto da divisão por 16, mapeamos esse resto para o caractere hexadecimal correspondente (‘0’–‘9’ ou ‘A’–‘F’) e fazemos push na pilha. Depois, dividimos o número por 16. 3) Ao fim, desempilhamos todos os caracteres e os imprimimos, obtendo a representação em hexadecimal.

Passo 5

Por fim, implementamos o código completo em C: definimos a função decToHex, o stack como array, o main para ler a entrada do usuário, chamar a função e exibir o resultado.

Resposta

#include <stdio.h>
#include <stdlib.h>
#define MAX 100
void decToHex(int n) {
char stack[MAX];
int top = -1;
if (n == 0) {
    printf("0");
    return;
}

while (n > 0) {
    int rem = n % 16;
    if (rem < 10)
        stack[++top] = '0' + rem;
    else
        stack[++top] = 'A' + (rem - 10);
    n /= 16;
}

while (top >= 0) {
    printf("%c", stack[top--]);
}
}
int main() {
int n;
printf(“Digite um número decimal: “);
if (scanf(”%d”, &n) != 1 || n < 0) {
printf(“Entrada inválida.\n”);
return 1;
}
printf("Hexadecimal: ");
decToHex(n);
printf("\n");

return 0;
}

Exercícios relacionados