Java 中的 Odious 数

17 Mar 2025 | 4 分钟阅读

在本节中,我们将学习如何找出 **Java 中的烦恼数**。

在本节中,我们将学习 **什么是烦恼数**,并创建 Java 程序 来检查给定的数字是否为 **烦恼数**。**烦恼数程序** 经常在 Java 编码面试和学术中出现。

烦恼数

烦恼数(On)是指其二进制表示中数字之和为奇数的数字。由于二进制表示仅包含两个数字:0 和 1。因此,我们也可以说二进制表示中包含奇数个 1 的数字称为 **烦恼数**。

烦恼数的示例

1 是一个烦恼数。因为 1 的二进制表示是 1,而 1 是一个奇数。

2 是一个烦恼数。因为 2 的二进制表示是 10,而 1 + 0 = 1,1 是一个奇数。

3 不是一个烦恼数。因为 3 的二进制表示是 11,而 1 + 1 = 2,2 不是一个奇数。

同样,我们也可以检查其他数字。

算法

步骤 1: 输入一个数字 n。

步骤 2: 找出数字 n 的二进制表示。

步骤 3: 找出步骤 4 中计算出的二进制表示中的所有数字之和。
步骤 4: 将和存储在变量中(假设其名称为 num)。

步骤 5: 检查 num 是否为奇数。如果 num 是奇数,则 n 是烦恼数;否则不是。

让我们在 Java 程序中实现上述算法。

实施

以下是使用上述步骤检查烦恼数的实现。

文件名: OdiousNumberExample.java

输出

1 is an odious number. 
2 is an odious number. 
3 is not an odious number. 
4 is an odious number. 
5 is not an odious number. 
6 is not an odious number. 
7 is an odious number. 
8 is an odious number. 
9 is not an odious number. 
10 is not an odious number. 
11 is an odious number. 
12 is not an odious number. 
13 is an odious number. 
14 is an odious number. 
15 is not an odious number. 
16 is an odious number. 
17 is not an odious number. 
18 is not an odious number. 
19 is an odious number. 
20 is not an odious number.

使用 ArrayList

可以使用 ArrayList 来找出烦恼数。

算法

步骤 1: 输入一个数字 n。

步骤 2: 找出数字 n 的二进制表示。

步骤 3: 将二进制表示中的所有 1 存储在 ArrayList 中。

步骤 4: 计算 ArrayList 的大小。

步骤 5: 检查 ArrayList 的大小是否为奇数。如果大小是奇数,则 n 是烦恼数;否则不是。

实施

以下是使用上述步骤检查烦恼数的实现。

文件名: OdiousNumberExample1.java

输出

1 is an odious number. 
2 is an odious number. 
3 is not an odious number. 
4 is an odious number. 
5 is not an odious number. 
6 is not an odious number. 
7 is an odious number. 
8 is an odious number. 
9 is not an odious number. 
10 is not an odious number. 
11 is an odious number. 
12 is not an odious number. 
13 is an odious number. 
14 is an odious number. 
15 is not an odious number. 
16 is an odious number. 
17 is not an odious number. 
18 is not an odious number. 
19 is an odious number. 
20 is not an odious number.