So überprüfen Sie, ob eine Dezimalzahl durch 7 teilbar ist:
Löschen Sie die letzte Ziffer. Multipliziere es mit 2 und subtrahiere von dem, was übrig ist. Wenn das Ergebnis durch 7 teilbar ist, ist die ursprüngliche Zahl durch 7 teilbar.
(auch zB hier beschrieben )
Diese Regel eignet sich für die manuelle Teilbarkeitsprüfung. Beispielsweise:
Ist 2016 durch 7 teilbar?
Subtrahieren
6*2
von 201; wir bekommen 189. Ist das durch 7 teilbar? Um dies zu überprüfen, wenden wir die Regel erneut an.Subtrahieren
9*2
von 18; wir bekommen 0. Deshalb ist 2016 durch 7 teilbar.
Bei dieser Herausforderung sollten Sie diese Regel anwenden, bis der Teilbarkeitsstatus offensichtlich ist , d. H., Die Anzahl ist nicht größer als 70 (Einzelheiten siehe unten). Machen Sie eine Funktion oder ein volles Programm.
Eingabe : eine positive ganze Zahl; Ihr Code sollte Eingaben bis zu 32767 unterstützen (die Unterstützung von Ganzzahlen mit beliebiger Genauigkeit ist ein Bonus; siehe unten).
Ausgabe : eine ganze Zahl (möglicherweise negativ), nicht größer als 70, die das Ergebnis der null- oder mehrmaligen Anwendung der Teilbarkeitsregel durch 7 ist.
Testfälle:
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
Wenn zwei mögliche Ausgaben angegeben sind, ist jedes Ergebnis korrekt: Die zweite entspricht der erneuten Anwendung der Regel. Es ist verboten, die Regel auf eine einstellige Zahl anzuwenden: Wenn Sie die Ziffer löschen, bleibt nichts (nicht 0) übrig.
Bonus : Wenn Ihr Algorithmus
- Unterstützt Ganzzahlen mit beliebiger Genauigkeit
- Führt nur einen Durchgang für die Eingabe aus
- Hat Raumkomplexität
o(n)
(dh weniger alsO(n)
); und - Hat zeitliche Komplexität
O(n)
,
wo n
ist die Anzahl der Nachkommastellen:
Subtrahieren Sie 50% von der Byteanzahl Ihres Codes.
Echter Bonus :
Wenn Ihr Algorithmus die Eingabe ausgehend von der höchstwertigen Ziffer in normaler Richtung liest, subtrahieren Sie 50% erneut - Ihre Punktzahl beträgt 25% Ihrer Byteanzahl (es scheint möglich, aber ich bin mir nicht ganz sicher).
1000000000000000000001
.
long long
s oder ein gleichwertiger Typ integriert ist?