Java 程序在不使用 / 和 % 运算符的情况下检查数字是否为 5 的倍数

2025年5月13日 | 阅读 4 分钟

给定一个数字 n。任务是检查一个数字是否是 5 的倍数,而不使用除法 (/) 或模数 (%) 运算符。

示例 1

输入 30

输出: 30 是 5 的倍数:true

解释: 30 的最后一位数字是 0,所以它是 5 的倍数。

示例 2

输入 17

输出: 17 是 5 的倍数:false

解释: 17 的最后一位数字是 7,不是 0 或 5,所以它不是 5 的倍数。

示例 3

输入 125

输出: 125 是 5 的倍数:true

解释: 125 的最后一位数字是 5,所以它是 5 的倍数。

方法 1:使用重复减法

该方法通过从给定的数字中反复减去 5 来确定该数字是否是 5 的倍数。如果数字最终减少到 0,则它是 5 的倍数;否则,不是。

算法

步骤 1: 将数字转换为其绝对值,以处理负数。

步骤 2: 反复从数字中减去 5,直到它小于 5。

步骤 3: 如果剩余值为 0,则返回 true(它是 5 的倍数);否则,返回 false。

输出

 
25 is a multiple of 5: true   

复杂度

时间复杂度: 程序的 O(n) 时间复杂度。因为我们反复减去 5,所以对于较大的 n,循环大约运行 n/5 次。

空间复杂度: 程序的 O(1) 空间复杂度。因为除了几个整数变量外,没有使用额外的空间。

方法 2:使用乘法和减法

该方法通过从 0 开始迭代并将结果乘以 5,直到我们达到给定的数字或超过它,来检查一个数字是否是 5 的倍数。如果我们找到匹配项,则该数字是 5 的倍数;否则,不是。

算法

步骤 1: 取数字的绝对值以处理负数情况。

步骤 2: 初始化 x = 0。

步骤 3: 使用循环来计算 5 * x 并检查它是否等于 n。

步骤 3.1: 如果 5 * x == n,则返回 true。

步骤 3.2: 如果 5 * x 大于 n,则返回 false。

步骤 3.3: 否则,递增 x 并继续。

输出

 
20 is a multiple of 5: true   

复杂度

时间复杂度: 程序的 O(n) 时间复杂度。因为我们迭代一个循环来计算。

空间复杂度: 程序的 O(1) 空间复杂度。因为除了几个整数变量外,没有使用额外的空间。

方法 3:将数字转换为字符串并检查最后一位数字

该方法将给定的数字转换为字符串,并检查最后一位数字是否是 0 或 5。因为是 5 的倍数的数字最后一位总是 0 或 5。

算法

步骤 1: 将数字转换为其绝对值(以处理负数)。

步骤 2: 将绝对值转换为字符串。

步骤 3: 使用 charAt(length - 1) 提取最后一位数字。

步骤 4: 如果最后一位数字是 '0' 或 '5',则返回 true;否则,返回 false。

输出

 
20 is a multiple of 5: true   

复杂度

时间复杂度: 程序的 O(n) 时间复杂度。因为我们使用字符串转换,而检查最后一位数字是快速操作。

空间复杂度: 程序的 O(1) 空间复杂度。因为只使用了一个字符串和一个字符变量。


下一个主题Java 8 过滤器