C++趣味程序-3种方法判断数据的奇偶

基本概念

Even:指偶数,能够被2整除。

Odd:指奇数,不能被2整除。

如下例子:

Input: n = 11
Output: Odd
Explanation: 11不能被2整除,所以是奇数。


Input: n = 20
Output: Even
Explanation: 20能被2整除,所以是偶数。

模运算判断数据的奇偶

这种方式是最简单的,判断是否能被2整除。在计算机中可以使用模运算进行判断。比如给定某个数据,模2运算,但余数为0时,就是偶数。当余数为非0时(只能为1)就是奇数。

完整代码如下:

// C++程序使用模运算
// 判断数据是基数还是偶数
#include <bits/stdc++.h>
using namespace std;

int main() {
    int n = 11;

    // n能被2整除
    if (n % 2 == 0)
        cout << "Even";

    // n不能被2整除
    else
        cout << "Odd";
    return 0;
}

输出

Odd

时间复杂度:O(1)

空间复杂度:O(1)

使用按位运算AND(&)判断数据的奇偶

这种方式就开始有点意思了,有意思的原因是这里开始是从计算机的角度来看问题。第一种方法,使用的是十进制的角度来看数据的。现在使用二进制的角度来看待数据的奇偶。

给定的一个数据,转换成二进制后:

如果这个数据是偶数,那么他的最低位【Least Significant Bit(LSB)】一定是0。

如果这个数据是奇数,那么他的最低位【Least Significant Bit(LSB)】一定是1。

此时可以与1进行AND按位运算,按位运算的逻辑是指,将1转换为二进制0001后,2个数据进行按位AND运算。

按位对比。相同为1,不同为0。

完整代码如下:

// C++程序使用按位AND
// 判断程序的奇偶
#include <bits/stdc++.h>
using namespace std;

int main() {
    int n = 11;
  
    // n和1执行按位AND运算
    int res = n & 1;

    // 如果res为0,为偶数
    if (res == 0)
        cout << "Even";

    // 否则为奇数
    else
        cout << "Odd";
    return 0;
}

输出

Odd

时间复杂度:O(1)。

空间复杂度:O(1)。

使用移位运算(<<和>>)判断数据的奇偶

同样这也是使用计算机二进制角度来看问题。

移位操作基本概念如下,比如下面这个数据:

0100 0011

右移1位后

0010 0001

再次左移

0100 0010

给定的一个数据,转换成二进制后:

如果这个数据是偶数,那么他的最低位【Least Significant Bit(LSB)】一定是0。

如果这个数据是奇数,那么他的最低位【Least Significant Bit(LSB)】一定是1。

此时使用移位运算,先使用右移操作,使得最低位“消失”。再使用左移操作将最低位设置为0。

然后将新数据与老数据做对比,没变就说明是偶数,变了说明是奇数。

完整代码如下:

// C++程序使用位移运算
// 判断程序的奇偶
#include <iostream>
using namespace std;

int main() {
    int n = 11;
      
      // temp变量存储原始数据n
    int temp = n;
  
      // 右移1位
    temp = temp >> 1;
      
      // 左移1位
    temp = temp << 1;
  
      // 检测temp值是否发生变化,没变化说明是偶数
      // 变化了说明是奇数
    if (temp == n) {
        cout << "Even" << endl;
    } else {
        cout << "Odd" << endl;
    }
    return 0;
}

输出

Odd

时间复杂度:O(1)。

空间复杂度:O(1)。

原文地址:C++趣味程序-3种方法判断数据的奇偶

🤖✨ 想获取更多有趣的IT知识吗?🤖✨ 

📱💡欢迎关注我们的微信公众号“IT先锋社”!📱💡

🔍🌟这里有最新的科技动态和实用技巧等你来探索!🔍🌟

🚀🎉快来一起加入我们的IT大家庭吧!🚀🎉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT1995

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值