基本概念
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大家庭吧!🚀🎉