HJ99 自守数
描述
自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25^2 = 625,76^2 = 5776,9376^2 = 87909376。请求出n(包括n)以内的自守数的个数
数据范围: 1≤𝑛≤10000 1≤n≤10000
输入描述:
int型整数
输出描述:
n以内自守数的数量。
示例:
输入:6 输出:4 说明:有0,1,5,6这四个自守数
输入:1 输出:2说明:有0, 1这两个自守数
分析:
1.根据余数是否等于原数。
代码:
import java.util.*;
public class Main{public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n=sc.nextInt();if(n<1||n>10000){System.out.println("非法输入!");return;}int num;int count=0;for (int i = 0; i <=n ; i++) {num=i*i;if(i<10){if(num%10==i){//System.out.print(i+" ");count++;}}else if(i<100){if(num%100==i){//System.out.print(i+" ");count++;}}else if(i<1000){if(num%1000==i){//System.out.print(i+" ");count++;}}else {if(num%10000==i){//System.out.print(i+" ");count++;}}}//System.out.println();System.out.println(count);}
}
大佬代码:
使用字符串的endsWith判断。
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);while (in.hasNext()) {int n = in.nextInt();int count = 0;for (int i = 0; i <= n; i++) {String str = String.valueOf(i*i);String s = String.valueOf(i);if (str.endsWith(s)) {count++;}}System.out.println(count);}}
}
使用字符串的substring函数和equals函数。
import java.util.*;
public class Main {public static void main(String[] args){Scanner sc = new Scanner(System.in);while(sc.hasNext()){int n = sc.nextInt();int count = 0;for(int i=0;i<=n;i++){int sum =i*i;String s1 = String.valueOf(i);String s2 = String.valueOf(sum);//从平方的尾部往前截取到与当前数长度相同的子串if(s2.substring(s2.length()-s1.length()).equals(s1)){count++;}}System.out.println(count);}}
}
看看大佬的取模运算能简化成这样,我的一大堆代码!!!
private static int v1(int n) {int sqr = 10, count = 0;for (int i = 0; i <= n; i++) {if (i >= sqr) {sqr *= 10;}if (Math.pow(i, 2) % sqr == i) {++count;}}return count;}