Ваша задача - написать программу или функцию, которая определяет, делится ли число на другое. Подвох в том, что он должен дать ответ как можно скорее , даже если не все цифры номера были даны.
Ваша программа должна принимать целое число D ≥ 2 и затем последовательность цифр в качестве входных данных. Они представляют собой цифры другого целого числа N ≥ 1, начиная с наименее значащей цифры. В первой точке , что N либо должен или не должен быть divisble на D , ваша программа должна вывести соответствующий ответ и выход. Если достигнут конец ввода, он должен вывести, делится ли полное N на D .
Вот список допустимых форматов ввода для N (оставьте комментарий, если вы считаете, что то, что не включено, должно быть разрешено):
Стандартный ввод : цифры даны в отдельных строках; конец ввода - EOF или специальное значение; Выход означает, что функция возвращается или программа завершается.
Аналоговый ввод : например, нажатием клавиш или десятью кнопками, представляющими каждую цифру; конец ввода является специальным значением; Выход означает, что функция возвращается или программа завершается.
Функция с глобальным состоянием : вызывается повторно с последовательными цифрами; конец ввода является специальным значением; Выход означает, что функция возвращает ненулевое значение. Обратите внимание, что если вы используете глобальное состояние, оно должно быть очищено после того, как значение возвращено, или иначе сброшено , чтобы функция работала несколько раз .
Curried function : возвращает либо другую функцию, которая будет вызвана со следующей цифрой, либо значением; конец ввода - это специальное значение или вызов функции без аргумента; Выход означает, что функция возвращает ответ, а не другую функцию.
Приглашение GUI или подобное : отображается повторно; конец ввода «отмена» или эквивалентный, или специальное значение; Выход означает, что запросы перестают появляться.
Функция итератора : input - это объект или функция с состоянием, который возвращает следующую цифру при вызове, end of input - исключение или специальное значение; Выход означает, что итератор перестает вызываться.
Ввод для D и вывод может быть через любой приемлемый стандартный метод .
Тестовые случаи:
2; 6 => true
5; 6 => false
20; 0 3 => false
20; 0 4 => true
100; 1 => false
100; 0 0 => true
100; 0 2 => false
4; 2 4 => false
4; 2 5 => true
4; 2 [eof] => false
4; 4 [eof] => true
625; 5 5 => false
625; 5 7 2 => false
625; 5 7 3 6 => false
625; 5 7 3 4 => true
7; 9 3 4 [eof] => false
7; 9 3 4 5 [eof] => true
140; 0 3 => false
140; 0 4 5 [eof] => false
140; 0 4 5 1 [eof] => true
14; 4 5 1 4 [eof] => false
14; 4 5 1 4 1 [eof] => true
digits
входных данных со специальным значением для EOF?
[]
и [2]
возвращение ничего, кроме false
или true
( в том числе и самой функции и т.д. ...) в то время как [2,3]
, [2,3,1]
и [2,3,1,EOF]
возвращение true
. Мне кажется, что это близко к глобальному состоянию.