繁体   English   中英

测试数字是奇数还是偶数

[英]Test if number is odd or even

找出 PHP 中的数字/变量是奇数还是偶数的最简单最基本的方法是什么? 跟mod有关系吗?

我已经尝试了一些脚本,但是.. 谷歌目前没有提供。

您认为 mod 是一个很好的起点,这是正确的。 这是一个表达式,如果$number为偶数,则返回 true,如果$number奇数,则返回 false:

$number % 2 == 0

适用于每个整数PHP值,另请参阅算术运算符PHP

例子:

$number = 20;
if ($number % 2 == 0) {
  print "It's even";
}

输出:

它甚至

另一种选择是简单的位检查。

n & 1

例如:

if ( $num & 1 ) {
  //odd
} else {
  //even
}

是的,使用 mod

$even = ($num % 2 == 0);
$odd = ($num % 2 != 0);

虽然所有答案都很好且正确,但一行中的简单解决方案是:

$check = 9;

任何一个:

echo ($check & 1 ? 'Odd' : 'Even');

要么:

echo ($check % 2 ? 'Odd' : 'Even');

效果很好。

(bool)($number & 1)

要么

(bool)(~ $number & 1)

另一种选择是检查最后一位数字是否为偶数:

$value = "1024";// A Number
$even = array(0, 2, 4, 6, 8);
if(in_array(substr($value, -1),$even)){
  // Even Number
}else{
  // Odd Number
}

或者为了让它更快,使用isset()而不是array_search

$value = "1024";// A Number
$even = array(0 => 1, 2 => 1, 4 => 1, 6 => 1, 8 => 1);
if(isset($even[substr($value, -1)]){
  // Even Number
}else{
  // Odd Number
}

或者让它更快有时击败mod operator ):

$even = array(0, 2, 4, 6, 8);
if(in_array(substr($number, -1),$even)){
  // Even Number
}else{
  // Odd Number
}

这是时间测试,以证明我的发现。

我做了一些测试,发现在 mod、 is_int& is_int之间,mod 是最快的,紧随其后的是 &-operator。 is_int比 mod 慢近 4 倍。

我使用以下代码进行测试:

$number = 13;

$before = microtime(true);
for ($i=0; $i<100000; $i++) {
    $test = ($number%2?true:false);
}
$after = microtime(true);

echo $after-$before." seconds mod<br>";

$before = microtime(true);
for ($i=0; $i<100000; $i++) {
    $test = (!is_int($number/2)?true:false);
}
$after = microtime(true);

echo $after-$before." seconds is_int<br>";

$before = microtime(true);
for ($i=0; $i<100000; $i++) {
    $test = ($number&1?true:false);
}
$after = microtime(true);

echo $after-$before." seconds & operator<br>";

我得到的结果非常一致。 这是一个示例:

0.041879177093506 seconds mod
0.15969395637512 seconds is_int
0.044223070144653 seconds & operator

PHP 正在将 null 和空字符串自动转换为零。 模数也会发生这种情况。 因此将代码

$number % 2 == 0 or !($number & 1)

值 $number = '' 或 $number = null 结果为真。 我对其进行了测试,因此扩展了一些:

function testEven($pArg){
    if(is_int($pArg) === true){
        $p = ($pArg % 2);
        if($p === 0){
            print "The input '".$pArg."' is even.<br>";
        }else{
            print "The input '".$pArg."' is odd.<br>";
        }
    }else{
        print "The input '".$pArg."' is not a number.<br>";
    }
}

The print is there for testing purposes, hence in practice it becomes:
function testEven($pArg){
    if(is_int($pArg)=== true){
        return $pArg%2;
    }
    return false;
}

此函数对于任何奇数返回 1,对于任何偶数返回 0,当它不是数字时返回 false。 我总是写 === true 或 === false 来让我自己(和其他程序员)知道测试是按预期进行的。

所有偶数除以 2 将得到一个整数

$number = 4;
if(is_int($number/2))
{
   echo("Integer");
}
else
{
   echo("Not Integer");
}

此代码检查 PHP 中的数字是奇数还是偶数。 在示例中$a2并且您得到偶数。 如果您需要奇数,则更改$a

$a=2;
if($a %2 == 0){
    echo "<h3>This Number is <b>$a</b> Even</h3>";
}else{
    echo "<h3>This Number is <b>$a</b> Odd</h3>";
}

在不使用条件和循环语句的情况下检查偶数或奇数。

这对我有用..!

 $(document).ready(function(){ $("#btn_even_odd").click(function(){ var arr = ['Even','Odd']; var num_even_odd = $("#num_even_odd").val(); $("#ans_even_odd").html(arr[num_even_odd % 2]); }); });
 <!DOCTYPE html> <html> <head> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <title>Check Even Or Odd Number Without Use Condition And Loop Statement.</title> </head> <body> <h4>Check Even Or Odd Number Without Use Condition And Loop Statement.</h4> <table> <tr> <th>Enter A Number :</th> <td><input type="text" name="num_even_odd" id="num_even_odd" placeholder="Enter Only Number"></td> </tr> <tr> <th>Your Answer Is :</th> <td id="ans_even_odd" style="font-size:15px;color:gray;font-weight:900;"></td> </tr> <tr> <td><input type="button" name="btn_even_odd" id="btn_even_odd" value="submit"></td> </tr> </table> </body> </html>

//for numbers n [0,1,2,3,4....]

if((n+2)%2==1) {
   //odd
}else {
  //even
}

零是偶数。 换句话说,它的奇偶校验(整数质量为偶数或奇数)为偶数。 证明零为偶数的最简单方法是检查它是否符合“偶数”的定义:它是2的整数倍,特别是0×2。因此,零共享所有表征偶数的属性:0可以被2整除,0的两侧都被奇数包围,0是其自身与整数(0)的和,并且0个对象的集合可以分为两个相等的集合。 来自http://en.wikipedia.org/wiki/Parity_of_zero

我假设已经有一个计数器。 在循环结束时递增的 $i 中,这对我使用速记查询有效。

$row_pos = ($i & 1) ? 'odd' : 'even';

那么这有什么作用呢,它会查询我们所做的声明,本质上 $i 是奇怪的,取决于它的真假将决定返回什么。 返回值填充我们的变量 $row_pos

我的用途是将它放在 foreach 循环中,就在我需要它之前,这使它成为一个非常有效的单行代码,可以为我提供适当的类名,这是因为我已经有一个计数器供 id 使用稍后在节目中。 这是我将如何使用这部分的一个简短示例。

<div class='row-{$row_pos}'> random data <div>

这给了我每一行的奇数和偶数类,所以我可以使用正确的类并将我的打印结果在页面上划线。

我使用的完整示例注意 id 应用了计数器,并且类应用了我的奇数/偶数结果。:

$i=0;
foreach ($a as $k => $v) {

    $row_pos = ($i & 1) ? 'odd' : 'even';
    echo "<div id='A{$i}' class='row-{$row_pos}'>{$v['f_name']} {$v['l_name']} - {$v['amount']} - {$v['date']}</div>\n";

$i++;
}

总之,这为我提供了一种非常简单的方法来创建漂亮的表格。

试试这个,

$number = 10;
 switch ($number%2)
 {
 case 0:
 echo "It's even";
 break;
 default:
 echo "It's odd";
 }

$number %2 = 1 如果是奇数...所以不必使用偶数...

$number = 27;

if ($number % 2 == 1) {
  print "It's odd";
}

两个简单的按位函数,返回 0 代表 False,返回 1 代表 True。

# is_odd: 1 for odd , 0 for even
odd = number & 1

# is_even: 1 for even , 0 for odd
even = number & 1 ^ 1

最优化的解决方案。

public function chkEvenOdd( $number ) {
    $arr = array('Even','Odd');
    return $arr[$number % 2];
}
it is working and right answer   
 $number =5;
    $a[0] ="Even";
    $a[1] ="Odd";
    echo $a[$number%2];
<?php
// Recursive function to check whether
// the number is Even or Odd 
function check($number){
    if($number == 0)
        return 1;
    else if($number == 1)
        return 0;
    else if($number<0)
        return check(-$number);
    else
        return check($number-2);        
}
  
// Check the number odd or even
$number = 35;
if(check($number))
    echo "Even";
else
    echo "Odd";
?>

因此,output 将是奇数

$before = microtime(true);

$n = 1000;  
$numbers = range(1,$n);

$cube_numbers = array_map('cube',$numbers);

function cube($n){      
    $msg ='even';       
    if($n%2 !=0){
        $msg = 'odd';
    }               
    return "The Number is $n is ".$msg;
}

foreach($cube_numbers as $cube){
    echo $cube . "<br/>";
}

$after = microtime(true);

echo $after-$before. 'seconds';
//checking even and odd
$num =14;

$even = ($num % 2 == 0);
$odd = ($num % 2 != 0);

if($even){
    echo "Number is even.";
} else {
    echo "Number is odd.";
}

用 #Input 字段试试这个

<?php
    //checking even and odd
    echo '<form action="" method="post">';
    echo "<input type='text' name='num'>\n";
    echo "<button type='submit' name='submit'>Check</button>\n";
    echo "</form>";

    $num = 0;
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
      if (empty($_POST["num"])) {
        $numErr = "<span style ='color: red;'>Number is required.</span>";
        echo $numErr;
        die();
      } else {
          $num = $_POST["num"];
      }


    $even = ($num % 2 == 0);
    $odd = ($num % 2 != 0);
    if ($num > 0){
        if($even){
            echo "Number is even.";
        } else {
            echo "Number is odd.";
        }
    } else {
        echo "Not a number.";
    }
    }
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM