鸭子数是指这样一种正整数:其内部包含数字 “0”,但数字的首位不能是 “0”。例如,10305、20050 和 603 都是鸭子数;而 0349 和 2987 则不是鸭子数 —— 因为 0349 以 “0” 开头,2987 内部则不包含任何 “0”。
在 Java 中,判断鸭子数有以下几种方法:
- 使用 while 循环
- 使用 contains () 方法
下面我们来详细了解每种方法的实现逻辑。
方法一:使用 while 循环判断鸭子数
此方法中,我们先获取输入的数字,然后从数字的末尾开始,通过取余运算符(%)和除法运算符(/)遍历其每一位数字,检查是否存在 “0”。若找到 “0”,则该数字为鸭子数。
实现步骤
按照以下步骤,使用 while 循环判断一个数字是否为鸭子数:
- 将数字作为字符串输入:选择字符串类型接收输入,是因为若以整数类型接收,Java 可能会将以 “0” 开头的数字(如 0523)当作八进制数处理,进而导致计算错误。
- 检查首位是否为 “0”:若数字的首位是 “0”,直接返回 “不是鸭子数”(false)。
- 从末尾遍历数字,检查是否包含 “0”:通过 “数字 % 10”(取余)获取当前末尾数字,再通过 “数字 / 10”(整除)去掉当前末尾数字,依次循环。若遍历过程中找到 “0”,则返回 “是鸭子数”(true);若遍历结束仍未找到 “0”,则返回 “不是鸭子数”(false)。
实现代码
以下是使用 while 循环判断鸭子数的 Java 代码:
import java.util.*;
public class ducknumber {
public static boolean checkducknum(String number) {
if (number.charAt(0) == '0') {
return false;
}
int num = Integer.parseInt(number);
while (num != 0) {
if (num % 10 == 0)
return true;
num = num / 10;
}
return false;
}
public static void main(String args[]) {
String n = "1004";
if (checkducknum(n))
System.out.println(n + " 是鸭子数");
else
System.out.println(n + " 不是鸭子数");
}
}
输出结果
若 n 为 1004,输出如下:
1004 是鸭子数
若 n 为 0974,输出如下:
0974 不是鸭子数
时间复杂度
该代码的时间复杂度为 O (n),其中 n 是该数字的位数。
方法二. 利用 contains () 方法判断鸭子数
使用字符串的 contains()
方法可以进一步简化上述代码。我们可以直接通过该方法判断数字(以字符串形式表示)是否包含 “0”,这样写出的代码会更加简洁精炼。
实现代码
以下是使用 contains () 方法判断鸭子数的 Java 代码:
import java.util.*;
public class ducknumber {
public static boolean checkducknum(String number) {
if (number.charAt(0) == '0') {
return false;
}
return number.contains("0");
}
public static void main(String args[]) {
String n = "01004";
if (checkducknum(n))
System.out.println(n + " 是鸭子数");
else
System.out.println(n + " 不是鸭子数");
}
}
输出结果
若 n 为 16078.输出如下:
16078 是鸭子数
若 n 为 00765.输出如下:
00765 不是鸭子数
时间复杂度
该代码的时间复杂度为 O (n)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容