Enunciado

Escreva um programa que receba um número inteiro e exiba quantos dígitos o número tem. Para tal, seu programa deve usar uma abordagem puramente matemática. Seu programa não pode usar conversões de tipos ou laços de repetição.

Exemplo de funcionamento:

Passo 1

Fala aí! Pra saber quantos dígitos tem um número inteiro, a gente poderia simplesmente transformar pra string e verificar seu tamanho com a função len(). Mas, infelizmente o enunciado nos proibiu de fazer isso.

Em vez disso, o enunciado mandou a gente tomar uma abordagem puramente matemática… Mas que tipo de operação matemática a gente pode fazer pra descobrir quantos dígitos tem um número?!

Bom, a gente pode usar logaritmos na base 10. Olha esses testes:

Reparou que se a gente arredondar pra baixo, e depois somar um, o resultado sempre vai ser a quantidade de dígitos?

Pegando só a parte inteira dos números e somando 1, resulta na quantidade de dígitos de qualquer número.

Agora que a gente sacou como fazer, bora escrever nosso programa em Python!

Passo 2

Pô, o enunciado tá mandando a gente pedir um número inteiro pro usuário… Pra isso, a gente pode usar a função input() pra perguntar e int() pra converter.

Pronto! Mas tem um problema que a gente tem que pensar… Números inteiros incluem números negativos, mas cara, não dá pra gente calcular log de números negativos!

Mas calma, nossa solução ainda tá de pé! Porque se a gente pegar o valor absoluto do número antes de calcular a quantidade de dígitos, o resultado vai ser a mesma, certo?

Ex: 123 e -123 têm a mesma quantidade de dígitos! Então, antes da gente aplicar a fórmulinha que acabamos de descobrir, primeiro a gente precisa pegar o valor absoluto do número que o usuário digitar! Pra isso, existe a função abs() no Python.

Não esquecendo que as funções são executadas da mais interna até a mais externa, hein… Nesse caso, o passo a passo que Python vai executar ao ler essa linha é esse:

Show! Agora, a gente já pode calcular direto a quantidade de dígitos.

Passo 3

Pô, pra aplicar a nossa fórmula, vamos precisar da função math.log(). Essa função tá dentro do módulo math, então vamos precisar importar. E é uma boa ideia a gente fazer importações no início do programa, lembra?

Pronto! Agora, vamos criar uma variável e salvar nela o resultado da nossa fórmula.

Mas antes da gente continuar, queria comentar com você que transformar pra int() não é a única forma da gente arredondar um número. Além desse jeito, a gente poderia usar as funções math.floor() e math.ceil(). Essas funções arredondam, respectivamente, pra baixo e pra cima. A função também arredonda números reais pra baixo, assim como a math.floor()!

Eu escolhi usar a int(), já que a gente usa ela sempre pra transformar de real pra inteiro, mas você poderia ter escolhido a math.floor(), ok?! Show! Bora continuar…

Cara, a gente já tem o número de dígitos. Só falta a gente exibir!

Passo 4

Pra exibir a quantidade de dígitos que o número recebido tem, a gente pode usar a função print().

Além da função print(), também coloquei uma formatação de string pra mensagem ficar no mesmo formato dos exemplos do enunciado. Tudo pra puxar saco do professor!

Existem vários tipos de formatação de string, e o ideal é você usar o que o seu professor ensinou na aula, ok? A gente bateu um papo sobre os tipos de formatação no tópico Operações com String aqui da playlist. Dá uma olhada lá, caso tu não se lembre.

Mas ok, agora que terminamos de digitar nossos códigos, vamos testar!

Passo 5

Pra testar, vou executar o código e colocar as mesmas entradas que tem no exemplo do enunciado, pra checar se a saída vai ser igual (apesar de a gente poder conferir só contando os dígitos!).

Executei com os números 100, 1003 e 59. Olha os resultados:

Parece que tá tudo certinho!

Obs: por causa da imprecisão dos computadores, essa abordagem provavelmente vai errar em alguns casos devido ao arredondamento (testa 1000 pra você ver!). Mas seu professor sabe disso, ok? Não precisa se preocupar!

Valeuuuu!

Resposta

Exercícios Relacionados