在没有模数或偶/奇函数的情况下,如何检查奇数或偶数?

时间:2019-10-31 11:55:24

标签: testing math

我最近在大学里参加过一次计算机考试,以前我们从未被教过模数函数或任何其他奇/偶函数检查方法,除先前的讲义外,我们无权访问任何外部文档。如果没有这些,怎么做呢?

3 个答案:

答案 0 :(得分:0)

我认为这仅适用于integer个数字,因为对于浮点值,我不知道奇/偶的概念。

对于这些integer数字,由Rotem提出的对最低有效位(LSB)进行检查是最直接的方法,但是还有许多种其他方法完成。

例如,您可以使用整数除法操作作为测试。这是实际上在每个平台中都实现的最基本的操作之一。整数除法的结果始终是另一个integer。例如:

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

这里,我将值13转换为int64,以确保MATLAB将数字视为integer而不是double数据类型。 同样,这里的结果实际上是四舍五入到下一个整数值。这是MATLAB特定的实现,其他平台可能会四舍五入,但这对我们来说并不重要,因为我们寻找的唯一行为是四舍五入,无论它采用哪种方式。通过四舍五入,我们可以定义以下行为:

  • 如果数字为偶数:将其除以2将得到精确的结果,因此,如果将结果乘以2,我们将得到原始数字。
  • 如果数字为奇数:将其除以2将得出四舍五入的结果,因此将其乘以2将得到与原始输入不同的数字。

现在您已经弄清楚了逻辑,代码非常简单:

%% 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

答案 1 :(得分:0)

我从一个同学那里发现了如何用数学而不是函数简单地解决这个问题。

使用(-1)^ n:

如果n为奇数,则结果为-1

如果n为偶数,则结果为1

这是一些开箱即用的想法,但这是解决此问题的唯一方法,而无需事先了解包括mod在内的复杂功能。

答案 2 :(得分:0)

按位与(&)

使用按位AND运算符提取数字的最后一位。如果最后一位为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