Java 中检查数字是否为 4 的幂

2024年9月10日 | 阅读 9 分钟

检查数字是否为 4 的幂有多种方法。在本节中,我们将讨论检查数字是否为 4 的幂的不同方法。

示例

输入: num = 7

输出: 7 不是 4 的幂

输入: num = 12

输出: 12 不是 4 的幂。

输入: num = 16

输出: 16 是 4 的幂。42 = 16

方法:使用以 4 为底的对数和 ceil 和 floor

在此方法中,我们计算输入数字的 log4 值。如果 log4(y) 的值(其中 y 是输入数字)是一个整数,那么 y 是 4 的幂;否则不是。

文件名: NumPowFour.java

输出

17 is not the power four. 
256 is the power of four. 
8 is not the power four. 
16 is the power of four.

方法:不使用 ceil 和 floor 的以 4 为底的对数

在此方法中,我们计算输入数字(假设为 y)的 log4 值。假设该值为 t。我们取该值的整数部分,并将其用作数字 4 的指数,即 4(int) t。如果该值等于 y,那么 y 是 4 的幂;否则不是。

文件名: NumPowFour1.java

输出

17 is not the power four. 
256 is the power of four. 
8 is not the power four. 
16 is the power of four.

方法:除以 4

步骤 1: 获取输入数字,并检查该数字是否能被 4 整除。如果不能整除,则输入数字不是 4 的幂。

步骤 2: 如果能整除,则将数字除以 4。如果除法后得到的数字是 1,则输入数字是 4 的幂。如果得到的数字不是 1,则重复步骤 1 和 2。

让我们看看它的实现。

文件名: NumPowFour2.java

输出

17 is not the power four. 
256 is the power of four. 
8 is not the power four. 
16 is the power of four.

方法:设置位

任何 2 的幂的数字的共同点是它们在二进制表示中只有一个置位位。观察下表。

数字二进制表示
11
210
311
4100
5101
6110
7111
81000
91001
101010

只有一个置位位的数字是 1、2、4、8。请注意,所有这些数字都是 2 的幂。20 = 1, 21 = 2, 22 = 4, and 23 = 8。

由于 4 的幂的数字必须是 2 的幂。因此,我们只查找 2 的幂的数字,然后过滤出 4 的幂的数字。

4 的幂的数字具有以下特征

  • 该数字中只有一个置位位,因为 4 的幂的数字始终是 2 的幂的数字。
  • 置位位之后的零的数量必须是偶数。2 在其二进制表示中是 10,置位位之后的零的数量是 1,这是奇数。因此 2 不是 4 的幂。16 在其二进制表示中是 10000,置位位之后的零的数量是 4,这是偶数。因此,16 是 4 的幂。

以下程序将使用上述特征来查找 4 的幂的数字。

文件名: NumPowFour3.java

输出

17 is not the power four. 
256 is the power of four. 
8 is not the power four. 
16 is the power of four.

可以通过与 0xAAAAAAAA 进行 & 运算来代替计算置位位之后的零的数量。与 0xAAAAAAAA 进行 & 运算很重要,因为它会移除置位位之后零的数量为奇数的数字(2、8、32 等)。观察以下程序。

文件名: NumPowFour4.java

输出

17 is not the power four. 
256 is the power of four. 
8 is not the power four. 
16 is the power of four.

方法:完全平方数

由于 4 是一个完全平方数,任何 4 的幂的数字都必须是完全平方数。因此,以下两个条件足以检查一个数字是否是 4 的幂:

  • 该数字应该是 2 的幂
  • 该数字应该是完全平方数。

文件名:java

输出

17 is not the power four. 
256 is the power of four. 
8 is not the power four. 
16 is the power of four.