Flashcard FC213974
Como usar uma pilha (Stack) e um multiplicador por potências de 10 para inverter os dígitos de um inteiro não-negativo em Java?
Linguagens de Programação
CESGRANRIO · 2024
Como usar uma pilha (Stack) e um multiplicador por potências de 10 para inverter os dígitos de um inteiro não-negativo em Java?
Mostrar resposta e comentário
Resposta
Empilha os restos obtidos por
num % 10 e, ao desempilhar, acumula cada dígito multiplicado por um multiplicador que vale 1, 10, 100, ... para reconstruir o número invertido.
Explicação detalhada:
- Use do...while para extrair ao menos um dígito (garante tratar 0 corretamente).
- No laço de extração: calcule
- Como a pilha é LIFO, ao desempilhar os restos obtemos os dígitos na ordem invertida.
- Reconstrua o inteiro com um multiplicador
- Complexidade: tempo e espaço O(d), onde d = número de dígitos.
- Use do...while para extrair ao menos um dígito (garante tratar 0 corretamente).
- No laço de extração: calcule
resto = num % 10, faça num /= 10 e pilha.push(resto).- Como a pilha é LIFO, ao desempilhar os restos obtemos os dígitos na ordem invertida.
- Reconstrua o inteiro com um multiplicador
i iniciando em 1 e multiplicando por 10 a cada iteração: resultado += pilha.pop() * i; i *= 10;.- Complexidade: tempo e espaço O(d), onde d = número de dígitos.
Exemplo:
Considere o inteiro 5040 e mostre as operações:
Extração (empilhar):
5040 % 10 = 0 → empilha 0; num = 504
504 % 10 = 4 → empilha 4; num = 50
50 % 10 = 0 → empilha 0; num = 5
5 % 10 = 5 → empilha 5; num = 0
Reconstrução (desempilhar) com i = 1,10,100,...:
\(resultado = 0\)
pop() = 5 → \(resultado += 5 * 1 = 5\)
i *= 10 → i = 10
pop() = 0 → \(resultado += 0 * 10 = 5\)
i = 100
pop() = 4 → \(resultado += 4 * 100 = 405\)
i = 1000
pop() = 0 → \(resultado += 0 * 1000 = 405\)
Resultado final: 405 (zeros à esquerda são descartados automaticamente ao representar o inteiro).
Considere o inteiro 5040 e mostre as operações:
Extração (empilhar):
5040 % 10 = 0 → empilha 0; num = 504
504 % 10 = 4 → empilha 4; num = 50
50 % 10 = 0 → empilha 0; num = 5
5 % 10 = 5 → empilha 5; num = 0
Reconstrução (desempilhar) com i = 1,10,100,...:
\(resultado = 0\)
pop() = 5 → \(resultado += 5 * 1 = 5\)
i *= 10 → i = 10
pop() = 0 → \(resultado += 0 * 10 = 5\)
i = 100
pop() = 4 → \(resultado += 4 * 100 = 405\)
i = 1000
pop() = 0 → \(resultado += 0 * 1000 = 405\)
Resultado final: 405 (zeros à esquerda são descartados automaticamente ao representar o inteiro).
Veja como foi cobrado:
https://flashcardsconcursos.com.br/portal/flashcard/213568
Conteúdo do catálogo FC Concursos · Atualizado em