题目描述
自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25^2 = 625,76^2 = 5776,9376^2 = 87909376。请求出n以内的自守数的个数
接口说明
/*
功能: 求出n以内的自守数的个数
输入参数:
int n
返回值:
n以内自守数的数量。
*/
public static int CalcAutomorphicNumbers( int n)
{
/*在这里实现功能*/
return 0;
}
本题有多组输入数据,请使用while(cin>>)等方式处理
输入描述:
int型整数
输出描述:
n以内自守数的数量。
示例1
输入
2000
输出
8
思路:(我只想到了把字符串转换切割,并没有想到 0,1,5,6,太难过了)
只有以0、1、5、6结尾的才可能是自守数。
判断方法:把对应数及其平方转为字符串,截取其平方最后对应位数的字符串与原数比较,相等则为自守数。
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ int n = sc.nextInt(); int five_end = 5; int one_end = 1; int six_end = 6; int zero_end = 0; int count = 0; if(n == 0){ System.out.println(1); }else if(n == 1){ System.out.println(2); } for(int i = 6; i < n; i += 10){ if(judge(zero_end)){ count++; } if(judge(one_end)){ count++; } if(judge(five_end)){ count++; } if(judge(i)){ count++; } zero_end += 10; one_end += 10; five_end += 10; } System.out.println(count); } } public static boolean judge(int n){ String pow =Integer.toString(n * n); String self = Integer.toString(n); int index = pow.length() - self.length(); if(pow.substring(index).equals(self)){ return true; } return false; } }
利用正则表达式
import java.util.Scanner; public class Test99 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { int n = scanner.nextInt(); int selfHoldNumber = 0; for (int i = 0; i <= n; i++) { if (((int) Math.pow(i, 2) + "").matches("[0-9]*" + i + "$")) { selfHoldNumber++; } } System.out.println(selfHoldNumber); } } }