判断自守数

题目描述:

如果某个数的平方的末尾几位数等于这个数,那么就称这个数为自守数。

显然,5和6是一位自守数(5x5=25 6x6=36),25x25=625 76x76=5776,所以25和76是两位自守数。

输入一个数,判断该数是否为自守数。

解题思路:若采用“求出一个数的平方后再截取最后相应位数”的方法,显然是不可取的,因为计算机无法表示过大的整数。所以我们采取大数相乘的思想来存储这个数的平方。然后再去判断该平方项的后几位是否与原数相等。

import java.util.Scanner;

public final class Demo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
        System.out.println("please num:");
        int n = scanner.nextInt();
        System.out.println(isAutoMorphicNum(n));

    }
    public static boolean isAutoMorphicNum(int num)
    {
        if(num < 0){
            return false;
        }
        if(num == 0){
            return true;
        }
        String s = String.valueOf(num);
        int[] number = new int[s.length()];
        for(int i=0;i<s.length();i++){
            number[s.length()-i-1] = s.charAt(i) - ‘0‘; // "12345"-> 5,4,3,2,1
        }
        int[] result = multi(number, number);
        String str = "";
        for(int i=result.length-1;i>=0;i--){
            str += result[i];
        }
        String str1 = num + "";
        if (str1.equals(str.substring(str.length() - str1.length()))) { //判断是否为自守数
            return true;
        }
        return false;
    }

    //下面的方法实现大数相乘,将结果每一位保存到result数组中
    public static int[] multi(int num1[], int num2[]){
        int len1 = num1.length;
        int len2 = num2.length;
        int[] result = new int[len1 + len2];
        for(int i=0;i<len1;i++){
            for(int j=0;j<len2;j++){
                result[i+j] += num1[i]*num2[j];
            }
        }
        for(int i=0;i<result.length-1;i++){
            if(result[i] > 10){
                result[i+1] += result[i]/10;
                result[i] %= 10;
            }
        }
        return result;
    }

}
时间: 2024-10-19 16:53:17

判断自守数的相关文章

算法15---数论4---自守数

算法15---数论4---自守数 如果一个正整数的平方的末尾几位数等于这个数本身,那么这个数便称为自守数. 自守数有如下的一些性质 (1) 以自守数为后几位的两数相乘,结果的后几位仍是自守数: (2) n+1位的自守数出自n为的自守数. (3) 两个n位子守数的和等于10的n次方加1. 我们给出两种自守数的算法 1 /* 2 题目:自守数 3 author taoliu——alex 2016.10 4 5 主要实现: 6 判断自守数: 7 8 */ 9 10 11 #include <stdio

判断一个int型数字是否是自守数

自守数 如果某个数的平方的末尾几位数等于这个数,那么就称这个数为自守数. 显然,5和6是一位自守数(5x5=25 6x6=36),25x25=625 76x76=5776,所以25和76是两位自守数. 详细描述: 接口说明 原型: Public static boolean isAutoMorphicNum( int num) 输入参数: num 需要判断的数 输出参数(指针指向的内存区域保证有效): 无 返回值: true 是自守数 false 不是自守数 涉及知识点: JAVA语言基础:数字

java笔试之自守数

链接:https://www.nowcoder.com/profile/108908/codeBookDetail?submissionId=2256243来源:牛客网 自守数是指一个数的平方的尾数等于该数自身的自然数.例如:25^2 = 625,76^2 = 5776,9376^2 = 87909376.请求出n以内的自守数的个数 接口说明 /*功能: 求出n以内的自守数的个数 输入参数:int n 返回值:n以内自守数的数量.*/ public static int CalcAutomorp

PAT 乙级 1091 N-自守数 (15 分)

1091 N-自守数 (15 分) 如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为"N-自守数".例如 3×92?2??=25392,而 25392 的末尾两位正好是 92,所以 92 是一个 3-自守数. 本题就请你编写程序判断一个给定的数字是否关于某个 N 是 N-自守数. 输入格式: 输入在第一行中给出正整数 M(≤20),随后一行给出 M 个待检测的.不超过 1000 的正整数. 输出格式: 对每个需要检测的数字,如果它是 N-自守数就在一行中

B1091 N-自守数 (15分)

B1091 N-自守数 (15分) 如果某个数 \(K\)的平方乘以\(N\) 以后,结果的末尾几位数等于 \(K\),那么就称这个数为"\(N\)-自守数".例如 \(3×92 ?^2 ?=25392\),而 25392 的末尾两位正好是 92,所以 92 是一个 3-自守数. 本题就请你编写程序判断一个给定的数字是否关于某个 N 是 N-自守数. 输入格式: 输入在第一行中给出正整数 \(M(≤20)\),随后一行给出 \(M\) 个待检测的.不超过 1000 的正整数. 输出格式

1091 N-自守数 (15分)

如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为“N-自守数”.例如 3,而 2 的末尾两位正好是 9,所以 9 是一个 3-自守数. 本题就请你编写程序判断一个给定的数字是否关于某个 N 是 N-自守数. 输入格式: 输入在第一行中给出正整数 M(≤),随后一行给出 M 个待检测的.不超过 1000 的正整数. 输出格式: 对每个需要检测的数字,如果它是 N-自守数就在一行中输出最小的 N 和 NK?2?? 的值,以一个空格隔开:否则输出 No.注意题目保证 0

C语言判断回文数

1 #include<stdio.h> 2 #include<stdlib.h> 3 int main() 4 { 5 //1.得到这个数字 2.翻转 3.进行比较 4.如果相同 就输出 是 否则 输出不是 6 7 int resource, result, re_tmp; //resource存放用户输入的数值 result存放翻转后的数值 re_tmp 存放用户输入的数值 在翻转的时候会用到 8 result = 0; //对result的初始化 9 printf("

自守数

import java.util.Scanner; public class GetSelfConttrolledNum { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num = sc.nextInt(); int count = getSelfControlledNum(num); System.out.println(count); } private static in

java判断输入的数是不是素数

1 package test; 2 3 import java.util.Scanner; 4 5 //判断输入的数是不是素数 6 public class Test18 { 7 public static void main(String[] args) { 8 Scanner s = new Scanner(System.in); 9 System.out.println("输入判断的数"); 10 int a = s.nextInt(); 11 for(int i=2 ; i&l