-
Notifications
You must be signed in to change notification settings - Fork 261
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add solution for challenge n° 03 by @imalisoon
- Loading branch information
Showing
2 changed files
with
63 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
# Desafio 03: Palindromos | ||
Solução implementada sem uso de conversão pra string :). | ||
|
||
## Sobre a solução | ||
Primeiro defini a função que faz a verificação do número que é recebido por parâmetro, e retorna um `bool`, `True` caso seja palindromo e `False` caso não. | ||
|
||
Já no escopo da função defini duas variáveis, `number_copy` que cria uma cópia do número original que vai ser usada para gerar o numero reverso sem ter que mexer no número original e `number_reverse` que vai ser o número reverso. | ||
|
||
> para escrever um numero ao contrario matematicamente primeiro usasse a operação `mod (%)`, que pega o numero, divide por **10** e o resto é exatamente o ultimo digito do número. | ||
> depois que extrair o ultimo digito, usa a variável `number_reverse` pra criar o numero ao contrário, digito por digito. pegando o valor atual multiplicando por **10** e somando com o ultimo digito extraido. | ||
> agora, pegamos a copia do numero original (`number_copy`) e removemos o ultimo digito usando divisão inteira (`//` no python). | ||
Ao final do laço e no fim da função verificamos se o numero invertido (`number_reverse`) é igual a o número original, caso seja, a operação retornará `True` iformando que é palindromo. | ||
|
||
Agora é so chamar a função usando um `loop` do *número incial* (`first_number`) ate o *ultimo numero* (`last_number`) e verificar cada numero do laço passando como argumento na chamada da função, assim imprimindo-o caso retorne `True`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
#!/usr/bin/env python3 | ||
# author: Alison gh: @imalisoon | ||
|
||
def is_palindrome(number: int) -> bool: | ||
number_copy: int = number | ||
number_reverse: int = 0 | ||
|
||
while number_copy > 0: | ||
last_digit: int = number_copy % 10 | ||
number_reverse = number_reverse * 10 + last_digit | ||
|
||
number_copy = number_copy // 10 | ||
|
||
return number_reverse == number | ||
|
||
def get_input(msg) -> str: | ||
return input(msg) | ||
|
||
|
||
if __name__ == "__main__": | ||
MAX = (1 << 64) - 1 | ||
while True: | ||
try: | ||
first_number: int = int(get_input("Informe o primeiro numero: ")) | ||
last_number: int = int(get_input("Informe o ultimo numero: ")) | ||
|
||
except ValueError: | ||
print("O primeiro e ultimo numero precisam ser interios positivos, nao letras!") | ||
continue | ||
|
||
if first_number <= 0 or last_number <= 0: | ||
print("O primeiro e ultimo numero precisam ser POSITIVOS! nao negativos ou ZEROS.") | ||
continue | ||
|
||
if last_number < first_number: | ||
print("O ultimo numero nao pode ser MENOR que o primeiro numero") | ||
continue | ||
|
||
if first_number > MAX or last_number > MAX: | ||
print("EPA! primeiro ou segundo excedem o valor limite. Tente denovo.") | ||
continue | ||
|
||
break | ||
|
||
print(f"\nPalindromos de {first_number} a {last_number}") | ||
for n in range(first_number, last_number+1): | ||
if is_palindrome(n): | ||
print(n) |