Pour vérifier si un nombre décimal est divisible par 7:
Effacez le dernier chiffre. Multipliez-le par 2 et soustrayez de ce qui reste. Si le résultat est divisible par 7, le nombre d'origine est divisible par 7.
(également décrit par exemple ici )
Cette règle est bonne pour le contrôle manuel de divisibilité. Par exemple:
2016 est-il divisible par 7?
Soustrayez
6*2de 201; nous obtenons 189. Est-ce divisible par 7? Pour le vérifier, appliquons à nouveau la règle.Soustrayez
9*2de 18; nous obtenons 0. Par conséquent, 2016 est divisible par 7.
Dans ce défi, vous devez appliquer cette règle jusqu'à ce que le statut de divisibilité soit évident , c'est-à-dire que le nombre ne dépasse pas 70 (cependant, voir ci-dessous pour plus de détails). Créez une fonction ou un programme complet.
Entrée : un entier positif; votre code doit prendre en charge des entrées jusqu'à 32767 (la prise en charge d'entiers de précision arbitraire est un bonus; voir ci-dessous).
Sortie : un entier (éventuellement négatif), non supérieur à 70, résultant de l'application de la règle de divisibilité par 7 zéro ou plusieurs fois.
Cas de 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
Lorsque deux sorties possibles sont spécifiées, l'un ou l'autre résultat est correct: le second correspond à l'application de la règle une fois de plus. Il est interdit d'appliquer la règle sur un numéro à un chiffre: si vous effacez le chiffre, il ne reste plus rien (pas 0).
Bonus : si votre algorithme
- Prend en charge les entiers de précision arbitraire
 - Effectue un seul passage sur l'entrée
 - A une complexité spatiale 
o(n)(c.-à-d. Inférieure àO(n)) et - A une complexité temporelle 
O(n), 
où nest le nombre de chiffres décimaux:
Soustrayez 50% du nombre d'octets de votre code.
Véritable bonus :
De plus, si votre algorithme lit l'entrée dans la direction normale, en commençant par le chiffre le plus significatif, soustrayez à nouveau 50% - votre score est de 25% de votre nombre d'octets (cela semble possible, mais je ne suis pas absolument sûr).
1000000000000000000001.
                long longs ou un type équivalent intégré?