Quantos Zeros Tem De 0 A
Contando Zeros em Sequências Numéricas
Você já precisa descobrir quantos zeros aparecem ao escrever todos os números de 0 até algum limite, como 1.000 ou 1.000.000? É uma daquelas perguntas que parece simples mas tem uma pegadinha matemática interessante. Vou explicar como fazer esse cálculo sem perder tempo. O método mais direto é analisar cada posição decimal separadamente. Não adianta tentar contar "nosso a olho" porque escala mal. Você precisa de uma fórmula. Para cada posição (unidades, dezenas, centenas etc.), a quantidade de zeros segue um padrão cíclico baseado em potências de 10. Vamos fazer isso na prática. Suponha que o objetivo seja contar todos os zeros ao escrever os números de 0 até 1.000.000. Eu costumo começar pelo menor exemplo para validar minha lógica antes de escalar.
Exemplo passo a passo: de 0 a 100
No intervalo 0 a 100, vou contar zeros posição por posição. Nas unidades, zeros aparecem a cada 10 números: 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100. Isso dá 11 zeros na posição das unidades. Nas dezenas, zeros aparecem nos números de 0 a 9 (onde não há dezena escrita, mas o zero existe como valor posicional invisível — e aqui entra a definição do problema, pois depende se você conta o "0" sozinho ou não) e no 100. Se eu considerar apenas zeros explicitamente escritos, então nas dezenas tenho apenas o zero do número 100, mais os dez números de 0 a 9 onde a dezena é implicitamente zero. O total aqui depende da convenção adotada. Pra evitar confusão, o padrão mais aceito é contar zeros efetivamente escritos: 0 aparece como "0" (um dígito zero), 10 aparece como "10" (um zero), 20 como "20", e assim por diante. O 100 tem dois zeros. Total: 1 (do número 0) + 9 (dos números 10, 20, ..., 90) + 2 (do 100) = 12 zeros de 0 a 100. Confere com a contagem manual.
Escala para 0 a 1.000.000
Agora a coisa fica mais séria. A fórmula geral para contar zeros na posição $10^k$ no intervalo de 0 a $N$ é: zeros na posição k = floor(N / 10^(k+1)) * 10^k + max(0, (N mod 10^(k+1)) - 10^k + 1) Aplicando para N = 1.000.000:

Posição das unidades (k=0): floor(1.000.000 / 10) * 1 + max(0, 0 - 1 + 1) = 100.000 * 1 + 0 = 100.000. Mas preciso lembrar do próprio número 0, que adiciona 1 zero extra. Total unidades: 100.001. Posição das dezenas (k=1): floor(1.000.000 / 100) * 10 + max(0, 0 - 10 + 1) = 10.000 * 10 + 0 = 100.000. Posição das centenas (k=2): floor(1.000.000 / 1.000) * 100 + max(0, 0 - 100 + 1) = 1.000 * 100 + 0 = 100.000.
Posição dos milhares (k=3): floor(1.000.000 / 10.000) * 1.000 = 100 * 1.000 = 100.000. Posição dos dez mil (k=4): floor(1.000.000 / 100.000) * 10.000 = 10 * 10.000 = 100.000. Posição dos cem mil (k=5): floor(1.000.000 / 1.000.000) * 100.000 = 1 * 100.000 = 100.000.
Posição dos milhões (k=6): floor(1.000.000 / 10.000.000) * 1.000.000 = 0. Nenhum zero extra aqui. Somando tudo: 100.001 + 100.000 + 100.000 + 100.000 + 100.000 + 100.000 + 100.000 = 600.001 zeros. Espera, eu cometi um erro. Preciso revisar. O número 1.000.000 tem seis zeros. A minha fórmula já conta zeros em posições específicas para todos os números de 0 a 999.999. O problema é que a minha análise para a posição das unidades estava errada — preciso recalcular com cuidado.

De 0 a 999.999, a posição das unidades tem zero em 0, 10, 20, ..., 999.990. São 100.000 ocorrências. Já o número 1.000.000 não contribui zero na posição das unidades (é 0, mas o dígito das unidades dele é 0 mesmo — então adiciona mais 1). Total unidades: 100.001. Ok, esse estava certo. Para as dezenas: de 0 a 999.999, a cada 100 números, as dezenas são zero em 10 ocorrências (00-09 dentro de cada bloco de 100). São 10.000 blocos de 100 em 1.000.000 números, então 10.000 * 10 = 100.000. O 1.000.000 também tem zero na dezena. Total: 100.001. Centenas: mesmo raciocínio. 1.000 blocos de 1.000, cada bloco contribui 100 zeros na posição das centenas. 1.000 * 100 = 100.000. Mais o 1.000.000: total 100.001.
Milhares: 100 blocos de 10.000, cada um com 1.000 zeros na posição dos milhares. 100 * 1.000 = 100.000. Mais o 1.000.000: 100.001. Dez milhesimos: 10 blocos de 100.000, cada um com 10.000 zeros. 10 * 10.000 = 100.000. Mais o 1.000.000: 100.001. Cem milhsimos: 1 bloco de 1.000.000 com 100.000 zeros. 100.000. Mais o 1.000.000: 100.001.
Milhões: o 1.000.000 tem o dígito 1 na posição dos milhões, então zero zero aqui. Só o dígito das unidades, dezenas etc. já foram contados. Total final: 100.001 * 6 = 600.006 zeros. Na prática, eu usei esse cálculo num projeto de gerador de certificados numéricos onde precisei validar a complexidade de strings enormes. O detalhe que me pegou foi exatamente esse: contar ou não o número zero isolado como tendo um dígito zero. Se você omitir o 0 inicial do intervalo, o total cai para 600.000. A diferença parece pequena, mas em auditoria de dados faz toda a diferença.

Pegadinhas comuns que ninguém avisa
O erro mais frequente é tratar todas as posições como simétricas. Elas não são. A posição das unidades se comporta diferente porque o ciclo de zeros começa em 0, enquanto nas dezenas o primeiro zero só aparece no número 0-9 (que tecnicamente não tem dígito de dezena). Isso quebra a simetria e exige tratamento especial no valor. Outro problema é a convenção sobre o número 0. Alguns problemas de competitive programming consideram o intervalo 1 a N, outros 0 a N. A resposta muda significativamente, especialmente em limites pequenos. Sempre verifique o enunciado antes de aplicar qualquer fórmula. Se você precisa fazer isso repetidamente para diferentes valores de N, vale a pena escrever uma função que implemente a fórmula posição por posição. Uma implementação em Python leva menos de 20 linhas e roda instantaneamente mesmo para N na casa de trilhões. A versão manual que eu fiz acima demoraria minutos e ainda assim poderia ter erro de conta — e eu errei duas vezes na mesma resposta.
Para valores muito grandes, como 10^18, a abordagem de força bruta (iterar número por número) simplesmente não funciona. O tempo de execução seria da ordem de anos em uma máquina comum. A fórmula posicional reduz isso para frações de segundo, porque você está fazendo operações aritméticas em vez de iteração.
Galeria
-
De 0 a 100 Quantos Zeros Tem ? - YouTube -
Quantos 0 (zeros) tem em 1 bilhão, 1 trilão e 1 milhão - HPG