Aby sprawdzić, czy liczba dziesiętna jest podzielna przez 7:
Usuń ostatnią cyfrę. Pomnóż to przez 2 i odejmij od tego, co zostało. Jeśli wynik jest podzielny przez 7, pierwotna liczba jest podzielna przez 7.
(opisane również np. tutaj )
Ta zasada jest przydatna przy ręcznym sprawdzaniu podzielności. Na przykład:
Czy 2016 można podzielić przez 7?
Odejmij
6*2
od 201; otrzymujemy 189. Czy można to podzielić przez 7? Aby to sprawdzić, zastosujmy ponownie regułę.Odejmij
9*2
od 18; otrzymujemy 0. Dlatego 2016 można podzielić przez 7.
W tym wyzwaniu powinieneś stosować tę regułę, dopóki status podzielności nie będzie oczywisty , to znaczy liczba nie będzie większa niż 70 (patrz szczegóły poniżej). Utwórz funkcję lub pełny program.
Dane wejściowe : dodatnia liczba całkowita; twój kod powinien obsługiwać dane wejściowe do 32767 (obsługa liczb całkowitych o dowolnej dokładności jest zaletą; patrz poniżej).
Wyjście : liczba całkowita (prawdopodobnie ujemna), nie większa niż 70, która jest wynikiem zastosowania reguły podzielności przez 7 zero lub więcej razy.
Przypadki testowe:
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
W przypadku określenia dwóch możliwych wyników, każdy wynik jest poprawny: drugi odpowiada zastosowaniu reguły jeszcze raz. Zabronione jest stosowanie reguły do liczby jednocyfrowej: jeśli usuniesz cyfrę, nie pozostanie nic (nie 0).
Bonus : Jeśli twój algorytm
- Obsługuje liczby całkowite o dowolnej dokładności
- Wykonuje tylko jeden przebieg na wejściu
- Ma złożoność przestrzeni
o(n)
(tj. Mniej niżO(n)
); i - Ma złożoność czasu
O(n)
,
gdzie n
jest liczba cyfr dziesiętnych:
Odejmij 50% liczby bajtów kodu.
Prawdziwy bonus :
Ponadto, jeśli twój algorytm odczytuje dane wejściowe w normalnym kierunku, zaczynając od najbardziej znaczącej cyfry, odejmij 50% jeszcze raz - twój wynik to 25% liczby bajtów (wydaje się to możliwe, ale nie jestem absolutnie pewien).
1000000000000000000001
.
long long
wbudowany s lub inny równoważny typ?