Per verificare se un numero decimale è divisibile per 7:
Cancella l'ultima cifra. Moltiplicalo per 2 e sottrai da ciò che resta. Se il risultato è divisibile per 7, il numero originale è divisibile per 7.
(descritto anche ad esempio qui )
Questa regola è valida per il controllo manuale della divisibilità. Per esempio:
È 2016 divisibile per 7?
Sottrai
6*2
da 201; otteniamo 189. È divisibile per 7? Per verificarlo, applichiamo di nuovo la regola.Sottrai
9*2
da 18; otteniamo 0. Pertanto, 2016 è divisibile per 7.
In questa sfida, è necessario applicare questa regola fino a quando lo stato di divisibilità non è evidente , ovvero il numero non è maggiore di 70 (tuttavia, vedere di seguito per i dettagli). Crea una funzione o un programma completo.
Input : un numero intero positivo; il tuo codice dovrebbe supportare input fino a 32767 (supportare numeri interi di precisione arbitraria è un bonus; vedi sotto).
Output : un numero intero (possibilmente negativo), non maggiore di 70, che è il risultato dell'applicazione della regola di divisibilità per 7 zero o più volte.
Casi test:
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
Laddove sono specificati due possibili output, entrambi i risultati sono corretti: il secondo corrisponde all'applicazione della regola ancora una volta. È vietato applicare la regola su un numero a una cifra: se si cancella la cifra, non viene lasciato nulla (non 0).
Bonus : se il tuo algoritmo
- Supporta numeri interi di precisione arbitraria
- Esegue solo un passaggio sull'ingresso
- Ha complessità spaziale
o(n)
(cioè inferiore aO(n)
); e - Ha complessità temporale
O(n)
,
dove n
è il numero di cifre decimali:
Sottrai il 50% dal conteggio dei byte del tuo codice.
Bonus reale :
Inoltre, se il tuo algoritmo legge l'input in direzione normale, partendo dalla cifra più significativa, sottrai nuovamente il 50%: il tuo punteggio è il 25% del conteggio dei byte (sembra possibile, ma non ne sono assolutamente sicuro).
1000000000000000000001
.
long long
incorporato qualche tipo equivalente?