概述

在这个简短的教程中,我们将讨论自回文数,并学习如何使用Java程序找到它们以及一些方法。

2. 自回文数是什么?

自回文数是指其平方的末尾数字与其本身相同的数字。

例如,25是一个自回文数,因为25的平方是625,末尾也是25。同样,76也是一个自回文数,因为76的平方是5776,再次以76结尾。

在数学上,自回文数也被称为循环数。其他一些自回文数的例子包括0、1、5、6、25、76、376、625、9376等。

0和1被称为平凡自回文数,因为它们在任何基数下都是自回文数。

3. 判断一个数是否是自回文数

有多种算法可以判断一个数是否是自回文数。接下来,我们将探讨几种方法。

3.1. 遍历数字并比较

这里有一种判断方法:

  1. 获取数字并计算其平方。
  2. 获取平方的最后一位数字并与数字的最后一位进行比较。
    • 如果最后一位不相等,那么这个数不是自回文数。
    • 如果最后一位相等,进行下一步。
  3. 从数字和平方中移除最后一位。
  4. 重复步骤2和3,直到比较完所有数字。

上述方法通过反向遍历输入数字的位数。

让我们用Java编写一个程序来实现这种方法。isAutomorphicUsingLoop()方法接受一个整数作为输入,检查它是否是自回文数:

public boolean isAutomorphicUsingLoop(int number) {
    int square = number * number;

    while (number > 0) {
        if (number % 10 != square % 10) {
            return false;
        }
        number /= 10;
        square /= 10;
    }
    
    return true;
}

首先,我们计算数字的平方。然后,我们迭代数字的每一位,并逐个比较它的最后一位与平方的最后一位。

在任何时候,如果最后一位不相等,我们返回false并退出方法。否则,我们去掉相等的最后一位,对数字的剩余位数重复该过程。

让我们测试一下:

assertTrue(AutomorphicNumber.isAutomorphicUsingLoop(76));
assertFalse(AutomorphicNumber.isAutomorphicUsingLoop(9));

3.2. 直接比较数字

我们还可以更直接地判断一个数是否是自回文数:

  1. 获取数字并计算其位数(n)。
  2. 计算数字的平方。
  3. 从平方中获取最后n位。
    • 如果平方的最后n位组成原始数字,那么它是自回文数。
    • 否则,它不是自回文数。

在这种情况下,我们不需要遍历数字的每一位。相反,我们可以利用编程框架现有的库。

我们可以利用Math类进行数值操作,如计算给定数字的位数,并从其平方中获取相应数量的最后几位:

public boolean isAutomorphicUsingMath(int number) {
    int square = number * number;

    int numberOfDigits = (int) Math.floor(Math.log10(number) + 1);
    int lastDigits = (int) (square % (Math.pow(10, numberOfDigits)));

    return number == lastDigits;
}

同样,我们从计算数字的平方开始。然后,我们不再逐个比较数字和平方的最后一位,而是一次性使用Math.floor()获取数字的总位数。接着,我们使用Math.pow()从平方中提取相应的位数。最后,我们比较输入的数字与提取出的数字lastDigits

如果numberlastDigits相等,那么它是自回文数,我们返回true;否则,返回false

让我们测试一下:

assertTrue(AutomorphicNumber.isAutomorphicUsingMath(76));
assertFalse(AutomorphicNumber.isAutomorphicUsingMath(9));

4. 总结

在这篇文章中,我们探讨了自回文数。我们还学习了如何判断一个数是否是自回文数,以及相应的Java程序示例。

如往常一样,这些示例的代码可以在GitHub上找到。


原始标题:Automorphic Numbers in Java | Baeldung