黑马程序员技术交流社区

标题: 【原创】java基础练习之水仙花数 [打印本页]

作者: Novice.Jin    时间: 2015-1-24 22:22
标题: 【原创】java基础练习之水仙花数
本帖最后由 Novice.Jin 于 2015-1-25 08:04 编辑

类 NarcissusNumber









  1. <p>/**
  2. * NarcissusNumber
  3. * 水仙花数是指一个 n 位数 ( n≥3 )
  4. * 它的每个位上的数字的 n 次幂之和等于它本身。
  5. * (例如:1^3 + 5^3+ 3^3 = 153)
  6. *
  7. * @author Novice
  8. * @version V1.1
  9. *class NarcissusNumber {
  10. //用于次方水仙花数
  11. private static long nNum;
  12. //用于存放水仙花数的基数
  13. private static int n;
  14. //用于取得数值的位数,小于1时n=0
  15. private static void countN(){
  16.   for(int i = 0;i < 20;i++ ){
  17.    int x = 1;
  18.    for(int j = 0;j < i;j++)
  19.     x *= 10;
  20.    if(nNum < x){
  21.     n = i;
  22.     break;
  23.    }
  24.   }
  25. }
  26. //取得x的n(基数)次方
  27. private static int countN(int x){
  28.   int y = x;
  29.   for(int i = 1;i < n;i++)
  30.    y *= x;
  31.   return y;
  32. }
  33. //取得各个位上的数
  34. private static int[] countSplit(){
  35.   countN();
  36.   int[] split = new int[n];
  37.   for(int i = 0;i < n;i++){
  38.    int x = 1;
  39.    for(int j = 0;j < i;j++)
  40.     x *= 10;
  41.    split[i] = (int)nNum/x%10;
  42.   }
  43.   return split;
  44. }
  45. //取得各个位n(基数)次冥相加的结果
  46. private static long countAdd(){
  47.   long add = 0;
  48.   int[] split = countSplit();
  49.   for(int i = 0;i < n;i++){
  50.    add += countN(split[i]);
  51.   }
  52.   return add;
  53. }
  54. /**
  55.   * judgeNum 用于判断一个数是否是水仙花数
  56.   * @param num 需要判断的数,需要大于100
  57.   * @return 是水仙花数则返回true,否则返回false,小于100返回false
  58.   */
  59. public static boolean judgeNum(long num){
  60.   nNum = num;
  61.   if((num > 100)&&(num == countAdd()))
  62.    return true;
  63.   return false;
  64.      
  65. }
  66. /**
  67.   * judgeSpace 判断两个数之间的水仙花数
  68.   * @param numStart 开始的数值
  69.   * @param numOver  结束的数值
  70.   * @return 返回一个次方有水仙花数的字符串,每个水仙花数用"\n"分隔
  71.   */
  72. public static String judgeSpace(long numStart,long numOver){
  73.   String str = "";
  74.   for(long i = numStart;i < numOver;i++){
  75.    if(judgeNum(i))
  76.     str += (i + "\n");
  77.   }
  78.   return str;
  79. }</p><p>public class Test {</p><p>public static void main(String[] args) {
  80.   System.out.println(NarcissusNumber.judgeNum(24678050));
  81.   System.out.println(NarcissusNumber.judgeSpace(0,99999));
  82. }</p>
复制代码








QQ截图20150124220912.png (18.94 KB, 下载次数: 11)

QQ截图20150124220912.png

作者: Novice.Jin    时间: 2015-1-24 22:27
终于完成今天的作业(自己给自己布置的)了
作者: xiawe_i    时间: 2015-1-24 22:33
仙花束,,,,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2