Para verificar se um número decimal é divisível por 7:
Apague o último dígito. Multiplique por 2 e subtraia o que resta. Se o resultado é divisível por 7, o número original é divisível por 7.
(também descrito, por exemplo, aqui )
Esta regra é boa para verificação de divisibilidade manual. Por exemplo:
2016 é divisível por 7?
Subtrair
6*2
de 201; temos 189. Isso é divisível por 7? Para verificar, vamos aplicar a regra novamente.Subtraia
9*2
de 18; temos 0. Portanto, 2016 é divisível por 7.
Nesse desafio, você deve aplicar esta regra até que o status de divisibilidade seja óbvio , ou seja, o número não seja maior que 70 (no entanto, veja detalhes abaixo). Faça uma função ou um programa completo.
Entrada : um número inteiro positivo; seu código deve suportar entradas de até 32767 (o suporte a números inteiros de precisão arbitrária é um bônus; veja abaixo).
Saída : um número inteiro (possivelmente negativo), não superior a 70, resultante da aplicação da regra da divisibilidade por 7 a zero ou mais vezes.
Casos de teste:
Input Output Alternative output
1 1
10 10 1
100 10 1
13 13 -5
42 42 0
2016 0
9 9
99 -9
9999 -3
12345 3
32767 28 -14
---------- Values below are only relevant for the bonus
700168844221 70 7
36893488147419103232 32 -1
231584178474632390847141970017375815706539969331281128078915168015826259279872 8
Onde duas saídas possíveis são especificadas, qualquer um dos resultados está correto: o segundo corresponde à aplicação da regra mais uma vez. É proibido aplicar a regra em um número de um dígito: se você apagar o dígito, não resta nada (não 0).
Bônus : se o seu algoritmo
- Suporta números inteiros de precisão arbitrária
- Executa apenas uma passagem na entrada
- Tem complexidade de espaço
o(n)
(ou seja, menor queO(n)
); e - Tem complexidade de tempo
O(n)
,
onde n
é o número de dígitos decimais:
Subtraia 50% da contagem de bytes do seu código.
Bônus real :
Além disso, se o seu algoritmo lê a entrada na direção normal, começando pelo dígito mais significativo, subtraia 50% mais uma vez - sua pontuação é de 25% da sua contagem de bytes (parece possível, mas não tenho certeza).
1000000000000000000001
.
long long
s ou algum tipo equivalente incorporado?