首页 > 试题广场 >

自守数

[编程题]自守数
  • 热度指数:156615 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}自守数是指这样一个自然数 x,其平方的尾数等于自身。更具体的说,即 x^2 的末尾若干位恰好等于 x,例如:
\hspace{23pt}\bullet\, 25^2=625625 的末尾两位恰好是 25
\hspace{23pt}\bullet\, 76^2=57765776 的末尾两位恰好是 76
\hspace{23pt}\bullet\, 9\,376^2=87\,909\,37687\,909\,376 的末尾四位恰好是 9\,376
\hspace{15pt}现在,对于给定的 n,请统计 0n 之间的自守数个数。

输入描述:
\hspace{15pt}输入一个整数 n \left(1 \leqq n \leqq 10^4\right) 代表自守数的范围。


输出描述:
\hspace{15pt}输出一个整数,代表 0n 之间的自守数个数。
示例1

输入

25

输出

5

说明

\hspace{15pt}在这个样例中,0,1,5,6,25 是自守数。
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n = in.nextInt();
            int count = 0;
            for (int i = 0; i <= n; i++) {
                int value = i * i;
                if (String.valueOf(value).endsWith(String.valueOf(i))) {
                    count += 1;
                }
            }
            System.out.println(count);
        }
    }
}
发表于 2025-03-28 14:24:22 回复(0)
看到人家用字符串的方法轻轻松松就写出来了,惭愧惭愧。。。
存档一下最开始用的最笨的办法。。。
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        if (n <= 1) {  //0和1只有1个和两个自守数,不用参与穷举,直接输出就行;
            System.out.println(n + 1);
            return;
        }
        if (n < 5) {  //五以内自然数只有0和1两个自守数,同样直接输出;
            System.out.println(2);
            return;
        }
        System.out.println(String.valueOf(an(n)));
    }

    private static int an(int n ) {
        int count = 2;  //直接从5开始穷举,已经至少有两个自守数了,所以计数初始就是2;
        for (int i = 5; i <= n; i++) {
            if (Math.pow(i, 2) % (Math.pow(10, String.valueOf(i).length())) == i)
                count++;  /*有点绕,如果i是一位数,用i的平方模以10,即10的1次方,
                如果i是两位数,则模以100,即10的2次方……以此类推,i的长度即作为10的
                幂。最后用i的平方和10的n次幂取模运算,如果结果等于i,则i为自守数;*/
        }
        return count;
    }
}

发表于 2024-09-22 22:13:34 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int count = 0;
        for (int i = 0; i <= m; i++) {
            if (((long) Math.pow(i, 2) + "").endsWith(i + "")) {
                count++;
            }
        }
        System.out.println(count);
    }
}

发表于 2024-08-24 16:07:09 回复(0)
笨🐷办法,不用string,只用整数运算
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int res = 0;
        for(int i = 0; i <= n; i++){
            if(i >= 0 && i <= 9 && (i * i - i) % 10 == 0){
                res++;
            }else if(i >= 10 && i <= 99 && (i * i - i) % 100 == 0){
                res++;
            }else if(i >= 100 && i <= 999 && (i * i - i) % 1000 == 0){
                res++;
            }else if(i >= 1000 && i <= 9999 && (i * i - i) % 10000 == 0){
                res++;
            }
        }
        System.out.println(res);
    }
}
发表于 2024-08-21 20:40:06 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int count = 0;
        for(int i = 0; i <= n; i++){
            if((i * i +"").endsWith(i+"")){
                count++;
            }
        }
        System.out.println(count);
    }
}

发表于 2023-11-28 20:45:08 回复(0)
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line;

        while ((line = br.readLine()) != null) {
            int n = Integer.parseInt(line);

            int count = 0;
            for (int i = 0; i <= n; i++) {
                // 计算平方
                int n2 = i * i;
                // 转换为字符串
                String n2Str = String.valueOf(n2);
                String iStr = String.valueOf(i);
                
                // 从平方结果中截取最后n位,n = i的长度
                String sub = n2Str.substring(n2Str.length() - iStr.length());
                if (Integer.parseInt(sub) == i) {
                    //System.out.println(i);
                    count++;
                }
            }

            System.out.println(count);
        }
    }
}

发表于 2023-08-15 11:23:46 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int sum = 0;
    
        for (int i = 0; i <= n; i++) {
            int pow = i * i;
            if (String.valueOf(pow).endsWith(String.valueOf(i))) {
                sum++;
            }
        }
        System.out.println(sum);
    }
}

发表于 2023-08-10 15:50:25 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int a = in.nextInt();
            int count = 0;
            for (int j = 0; j <= a; j++) {
                int c = j * j;
                if (String.valueOf(c).endsWith(String.valueOf(j))) {
                    count ++;
                }
            }
            System.out.println(count);
        }
    }
}

发表于 2023-06-08 16:56:32 回复(0)
import java.util.Scanner;
import java.util.Stack;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int res = 2;
        for (int i = 2; i <= n; i++) {
            char[] c1 = String.valueOf(i).toCharArray();
            int len1 = c1.length - 1;
            int m = i * i;
            char[] c2 = String.valueOf(m).toCharArray();
            int len2 = c2.length - 1;
            while (len1 >= 0 && c1[len1] == c2[len2]) {
                len1--;
                len2--;
            }
            if (len1 == -1) {
                res++;
            }
        }
        System.out.println(res);
    }
}
发表于 2023-03-16 14:59:42 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int n= in.nextInt();
        int count=0;
        for(int i=0; i<=n; i++){
            if(isZiShou(i)){count++;}
        }
        System.out.println(count);
    }

    public static boolean isZiShou(int n){
        return String.valueOf(n*n).endsWith(String.valueOf(n));
    }
}
发表于 2023-02-27 13:56:53 回复(0)
import java.util.Scanner;
import java.lang.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int num1 = in.nextInt();
        int count = 0;
        for(int i=0;i<=num1;i++){
            int num2 = (int)Math.pow(i,2);
            int len1 = String.valueOf(i).length();
            String str = String.valueOf(num2);
            String s = str.substring(str.length()-len1,str.length());
            if(i == Integer.valueOf(s)){
                count++;
            }
        }
        System.out.println(count);
    }
}
发表于 2023-02-08 09:51:45 回复(0)
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            int b = in.nextInt();
            int count = 0;
            for(int i=0;i <=b;i++){
                String c = ""+i*i;
                String d = ""+i;
                if(c.substring(c.length()-d.length(),c.length()).equals(d)){
                    count++;
                }
            }
            System.out.println(count);
        }
    }
}
发表于 2022-11-13 01:37:24 回复(0)
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt(),cnt = 0;
        for(int i = 0;i <= n;i ++ ){
            if((i*i+"").endsWith(i+"")) cnt++;
        }
        System.out.print(cnt);
    }
}


发表于 2022-09-25 12:35:03 回复(0)
import java.util.*;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int count = 0;
        for (int i = 0; i <= n; i++) {
            int num2 = (int) Math.pow(i, 2);//多次方
            String strNum = String.valueOf(i);
            String strNum2 = String.valueOf(num2);
            if (strNum.equals(strNum2.substring(strNum2.length() - strNum.length()))) {
//                System.out.println(i);
                count++;
            }
        }
        System.out.println(count);
    }
}
发表于 2022-08-05 10:33:38 回复(0)
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 count = 0;
            for (int i = 0; i <= n; i++) {
                String numStr = i * i + "";
                if (numStr.endsWith(i + "")) {
                    count++;
                }
            }
            System.out.println(count);
        }
    }
}
发表于 2022-07-10 12:00:04 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
        int nextInt = sc.nextInt();
        int count = 0;
        for (int i = 0; i <= nextInt ; i++) {
            String s1 = String.valueOf(i);
            int num = i*i;
            String s = String.valueOf(num);
                String substring = s.substring(s.length()-s1.length());
                if (s1.equals(substring)){
                    count++;
                }
        }
        System.out.println(count);
    }
}
发表于 2022-06-26 23:59:29 回复(0)
发表于 2022-06-16 15:17:37 回复(0)
// 我这个简单好理解,输入的数等于10、100、1000的余数(就是尾数)就可以了。
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int sum =0;
         // 注意 while 处理多个 case
            int n = sc.nextInt();
            
            for(int m=0;m<=n;m++){
                
                if(m>=0&m<=3 && m*m==m){
                    sum++;
                }else
                    if(m>=4&&m<10&&m==m*m%10){
                    sum++;
                    }else
                        if(m>=10&&m<100&&m==m*m%100){
                            sum++;
                    }else 
                        if(m>=100&&m<1000&m==m*m%1000){
                            sum++;
                        }else
                            if(m>=1000&&m<10000&m==m*m%10000){
                                sum++;
                            }
                
                
            }
       
            
        
        
        System.out.println(sum);
    }
}
发表于 2022-06-14 08:38:35 回复(0)
 int[] arr ={0,1,5,6,25,76,376,625,9376}; 枚举就可以解决
发表于 2022-05-29 20:53:49 回复(0)