Чтобы проверить, делится ли десятичное число на 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 или какой-нибудь эквивалентный тип?