算法_趣味整数_Question5_水仙花数(java实现)

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

问题描述

输出所有的“水仙花数”,所谓的“水仙花数”是指一个三位数其各位数字的立方和等于该数本身,例如,153是“水仙花数”,因为153=1*1*1 + 5*5*5 + 3*3*3

算法分析

只需要将数拆分计算立方和,最后将立方和与该数做判断即可,若相同则是水仙花数

代码实现

package funnyInteger;
/**
 * @author 叶清逸
 * @date 2018年7月13日下午11:57:10
 * @version 1.0
 * @project funnyInteger
 */
public class Q5_NarcissusNumber {
    /**
     * 问题描述:输出所有的“水仙花数”,所谓的“水仙花数”是指一个三位数其各位数字的立方和
     *          等于该数本身,例如,153是“水仙花数”,因为153=1*1*1 + 5*5*5 + 3*3*3
     * 
     * 算法分析:只需要将数拆分到一个数组中,在计算立方和,最后将立方和与该数做判断即可,
     *          若相同则是水仙花数
     */
    public static void main(String[] args) {
        /*假设判断范围为100~999,循环判断*/
        int start = 100 ;
        int end = 999 ;
        System.out.println(start+"~"+end+"之间的水仙花数有:");
        int num = 0 ;                                       //个数
        for(int i=start ; i<=end ; i++){
            /*求出该数的长度*/
            int length = getLength(i) ;
            /*求出底数a方便取出每一位数*/
            int a = 1 ;
            for(int j=0 ; j<length ; j++)
                a *= 10 ;
            int sum = 0 ;                                   //用于存放立方和
            /*计算每一位的立方和*/
            while(a/10 > 0){
                /*取出数*/
                int k = (i%a)/(a/10) ;
                /*计算立方和*/
                sum += k*k*k ;
                a /= 10 ;
            }
            /*判断每一位的立方和与原数是否相等,若相等则判断位水仙花数,输出*/
            if(i == sum){
                System.out.print(i+" ");
                num ++ ;
            }
        }
        System.out.println();
        System.out.println("共"+num+"个");
    }

    /*求参数number的长度*/
    private static int getLength(Integer number){
        int length = 1 ;
        while(number/10>0){
            length++ ;
            number /= 10 ;
        }
        return length ;
    }

}

样例输出

100~999之间的水仙花数有:
153 370 371 407 
共4个 

猜你喜欢

转载自blog.csdn.net/u013634252/article/details/81039625