自守数-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);
}
}
也更容易扩展...
我正在编写代码来检查数字是否在某种程度上是特殊的,例如是质数、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);
}
}
也更容易扩展...