java:算法 - 水仙花数

题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

package com.oz.algorithm;
import java.util.*;

public class MyMath{
  /*
   * this function returns a list of Narcissutic Numbers
   */
  public static List<Short> getNarcissutic(){
    List<Short> narcissuList = new ArrayList<>();
    short number = 100;
    //add narcissu to the list
    for(;number<=999;number++){
      if( isNarcissutic(number) )
        narcissuList.add(number);
    }
    return narcissuList;
  }
  /*
   * check if a number is a Narcissutic Number
   */
  public static boolean isNarcissutic(short number){
    short hundreds = (short)(number / 100);
    short tens = (short)((number - hundreds * 100) / 10 ); // or (short)(number%100)/10
    short ones = (short)(number - hundreds * 100 - tens * 10); // or (short)(number%10)
    short sum = (short)(Math.pow(hundreds,3) +
    Math.pow(tens,3) + Math.pow(ones,3));
    //return true if the number is a narcissu
    if(sum == number)
      return true;
    else
      return false;
  }
}

测试:

package com.oz;
import com.oz.algorithm.*;

public class Test1{

  public static void main(String[] args){

    System.out.print(MyMath.getNarcissutic());
    
  }

}

输出:

[153, 370, 371, 407]

附录:常见自幂数

三位的水仙花数共有4个:153,370,371,407;
四位的四叶玫瑰数共有3个:1634,8208,9474;
五位的五角星数共有3个:54748,92727,93084;
六位的六合数只有1个:548834;
七位的北斗七星数共有4个:1741725,4210818,9800817,9926315;
八位的八仙数共有3个:24678050,24678051,88593477

附录摘自百度百科

猜你喜欢

转载自blog.csdn.net/OliverZang/article/details/85260030