Щоб перевірити, чи десяткове число ділиться на 7:
Стерти останню цифру. Помножте його на 2 і відніміть від того, що залишилося. Якщо результат ділиться на 7, вихідне число ділиться на 7.
(також описано, наприклад, тут )
Це правило добре для ручної перевірки подільності. Наприклад:
Чи 2016 ділиться на 7?
Відняти
6*2
від 201; ми отримуємо 189. Це поділяється на 7? Щоб перевірити це, давайте знову застосуємо правило.Відняти
9*2
від 18; отримуємо 0. Тому 2016 рік ділиться на 7.
У цьому виклику слід застосовувати це правило до тих пір, поки статус очевидності не стане очевидним , тобто кількість не перевищує 70 (однак, детальніше див. Нижче). Зробіть функцію або повну програму.
Введення : натуральне число; ваш код повинен підтримувати входи до 32767 (підтримка цілих чисел з довільною точністю - бонус; див. нижче).
Вихід : ціле число (можливо, негативне), не більше 70, що є результатом застосування правила ділення на 7 нульового чи більше разів.
Тестові приклади:
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
Якщо вказано два можливі виходи, будь-який результат правильний: другий відповідає застосуванню правила ще раз. Забороняється застосовувати правило до одноцифрового числа: якщо ви стираєте цифру, нічого (не 0) не залишається.
Бонус : Якщо ваш алгоритм
- Підтримує цілі числа довільної точності
- Виконує лише один прохід на вході
- Має складність простору
o(n)
(тобто меншеO(n)
); і - Має складність у часі
O(n)
,
де n
кількість десяткових цифр:
Відняти 50% від кількості байтів вашого коду.
Справжній бонус :
Крім того, якщо ваш алгоритм читає вхід у нормальному напрямку, починаючи з найзначнішої цифри, віднімайте ще раз 50% - ваш бал становить 25% від вашого байтового числа (це здається можливим, але я не зовсім впевнений).
1000000000000000000001
.
long long
вбудований s або інший еквівалентний тип?