При отсутствии модуля или четной / нечетной функции, как можно проверить наличие нечетного или четного числа? - PullRequest
1 голос
/ 31 октября 2019

Я недавно сдавал компьютерный экзамен в университете, на котором нас никогда не учили заранее о функции модуля или любой другой проверке нечетной / четной функции, и у нас нет доступа к внешней документации, кроме наших предыдущих лекционных заметок. Можно ли это сделать без них и как?

Ответы [ 3 ]

0 голосов
/ 31 октября 2019

Я узнал от однокурсника, как решить это упрощенно с помощью математики вместо функций.

Использование (-1) ^ n:

Если n нечетно, то результат -1

Если n четно, то результат равен 1

Это довольно нестандартное мышление, но это был бы единственный способ решить эту проблему без предварительного знания сложныхфункции, включая мод.

0 голосов
/ 31 октября 2019

Побитовое И (&)

Извлечение последнего бита числа с помощью оператора побитового И. Если последний бит равен 1, то он нечетный, иначе он четный. Это самый простой и эффективный способ его тестирования. Примеры на некоторых языках:

C / C ++ / C #

bool is_even(int value) {
    return (value & 1) == 0;
}

Java

public static boolean is_even(int value) {
    return (value & 1) == 0;
}

Python

def is_even(value):
    return (value & 1) == 0
0 голосов
/ 31 октября 2019

Я предполагаю, что это только для integer чисел, поскольку понятие нечетных / четных не дает мне значения с плавающей запятой.

Для этих integer чисел проверка наименьшего значащего бита (LSB)как предложено Rotem - самый простой метод, но есть много других способов сделать это.

Например, вы можете использовать целочисленное деление операция в качестве теста. Это одна из самых основных операций, которая реализована практически на каждой платформе. Результатом целочисленного деления всегда является другое integer. Например:

>> x = int64( 13 ) ;
>> x / 2
ans =
                    7

Здесь я приведу значение 13 как int64, чтобы убедиться, что MATLAB обрабатывает число как integer вместо double типа данных. Также здесь результат фактически округляется до бесконечности до следующего интегрального значения. Это конкретная реализация MATLAB, другая платформа может округляться, но для нас это не имеет значения, поскольку единственное поведение, которое мы ищем - это округление, в зависимости от того, как оно идет. Округление позволяет нам определить следующее поведение:

  • Если число равно даже : деление его на 2 приведет к точному результату, так что если мы умножим этот результат на 2мы получаем исходное число.
  • Если число равно нечетное : деление его на 2 приведет к округленному результату, так что умножение на 2 приведет к получению числа, отличного от исходногоinput.

Теперь у вас есть логика, код довольно прост:

%% sample input
x = int64(42) ;
y = int64(43) ;

%% define the checking function
%   uses only multiplication and division operator, no high level function
is_even = @(x) int64(x) == (int64(x)/2)*2 ;

И, конечно, это даст:

>> is_even(x)
ans =
     1
>> is_even(y)
ans =
     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...