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
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
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
, repetimos divisões sucessivas por
, 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>
#include <stdlib.h>
#define MAX 100
void decToHex(int n) {
char stack[MAX];
int top = -1;
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;
}
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;
}