自守数-Java程序

Automorphic number - Java program

我正在编写代码来检查数字是否在某种程度上是特殊的,例如是质数、Kaprekar 数、自守数等。我已经研究了它的自守部分:

import java.io.*;
class automorphic
{
    public static void main(String ags[])throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter a number.");
        int num = Integer.parseInt(br.readLine());
        int sq = num*num;
        String number = Integer.toString(sq);
        int l = number.length();
        int x = l-1;
        String s = number.substring(x);
        int no = Integer.parseInt(s);

        if(no == num)
            System.out.println("Automorphic number.");
        else
            System.out.println("Not an automorphic number.");
    }
}

代码编译正常,执行也正常。但是,有一个逻辑错误。如果在提示输入时输入数字 25,屏幕会说它不是自守数,而实际上它是。我该如何解决这个问题? TIA.

你检查平方数的最后一位是否等于原数,这只适用于个位数。

你需要更换

String s = number.substring(x);

String s = number.substring(number.length-Integer.toString(num).length());

Integer.toString(num).length()是原数的位数,number.substring(number.length-Integer.toString(num).length())会给出平方数的最后Integer.toString(num).length()位。

static boolean isAutomorphic(int number)
{
    final int squared = number * number;

    return squared % 100 == number % 100;
}

如果重构并将 is Automorphic 检查分解为一个新函数并执行如下操作,您可能会发现前进起来要容易得多:

import java.io.*;

public class Automorphic {
    public static void main(String ags[])throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter a number.");
        int num = Integer.parseInt(br.readLine());
        if (isAutomorphic(num)) {
            System.out.println("Automorphic number.");
        } else {
            System.out.println("Not an automorphic number.");   
        }
    }

    public static boolean isAutomorphic(int number) {
        return ("" + number * number).endsWith("" + number);
    }
}

也更容易扩展...