算法_趣味整数_Question3_自守数(java实现)

这篇文章讲述的是算法趣味整数部分的自守数问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的《c语言趣味编程1000例》,如有错误或者不当之处,还望各位大神批评指正。

问题描述

自守数是指一个数的平方的尾数等于该数自身的自然数。例如:5^2=25 , 25^2=625 , 76^2==5776 , 9376^2=87909376 求出100000以内的自守数。

算法分析

关键问题是判断自然数的位数和取出尾数,专门写判断位数和取出尾数的方法方便解决问题。

代码实现

package funnyInteger;

public class Q3_AutomorphicNumber {
    /**
     * 问题描述:自守数是指一个数的平方的尾数等于该数自身的自然数。例如:5^2=25 , 
     *          25^2=625 , 76^2==5776 , 9376^2=87909376 求出100000以内的自守数。
     * 
     * 算法分析:关键问题是判断自然数的位数和取出尾数,专门写判断位数和取出尾数的
     *          方法方便解决问题。
     */
    public static void main(String[] args) {
        /*初始化范围*/
        long end = 100000;
        System.out.println(end+"以内的自守数有:");
        /*循环判断1~end的每一个数是否为自守数*/
        for(long i=0 ; i<=end ; i++){
            /*判断数的位数*/
            long length = getLength(i) ;
            /*求该数的平方*/
            long square = i*i ;
            /*取出平方的尾数*/
            long tail = getTail(square,length) ;
            /*判断尾数是否和该数本身相等,即是否为完数*/
            if(tail == i)
                System.out.print(i + " ");
        }
    }

    /*判断数的位数*/
    private static long getLength(long number) {
        int lenth = 1 ;
        while(number/10 > 0){
            lenth++ ;
            number/=10 ;
        }
        return lenth;
    }
    /*取出number末尾length位数*/
    private static long getTail(long number , long lenth) {
        long tail = 0;
        int a = 1;
        for(int i=0 ; i<lenth ;i++)
            a *= 10 ;
        tail = number%a ;
        return tail ;
    }
}

样例输出

200000以内的自守数有:
0 1 5 6 25 76 376 625 9376 90625 109376 

猜你喜欢

转载自blog.csdn.net/u013634252/article/details/80963860
今日推荐