A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 深井看海 中级黑马   /  2012-11-8 15:05  /  2669 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 深井看海 于 2012-11-11 23:07 编辑

为什么水仙花就是求三位数的立方和等于同一个数,例如:153 = 1的立方 + 5的立方 + 3 的立方,这是什么逻辑思想?那还有其他花吗,牡丹花,牵牛花,百合花。。。这和“求三位数的立方和”有什么关系啊?另请附上代码参考{:soso_e132:}

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

6 个回复

倒序浏览
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)。因为在春天水仙花是最迷人的,而数学家认为一个满足它的每个位上的数字的 n 次幂之和等于它本身的数是相当迷人的所以就叫之水仙花数。
  1. //打印三位数的水仙花数
  2. public class NumberOfDaffodils {
  3.         public static void main(String[] args) {
  4.                 //设置求水仙花数的最大范围
  5.                 int MAX = 1000;
  6.                
  7.                 for (int  i = 100; i < MAX; i++) {
  8.                         if (match(i)) {
  9.                                 System.out.println(i);
  10.                         }
  11.                 }
  12.        
  13.         }

  14.         private static boolean match(long in) {
  15.                 // 统计位数
  16.                 int count = (in + "").length();
  17.                 // 记录每位数字
  18.                 long temp = 0;
  19.                 // 辗转取余的保存数
  20.                 long num = in;
  21.                 // 求和数
  22.                 long sum = 0;
  23.                 for (int i = count; i > 0; i--) {
  24.                         temp = num / (long) Math.pow(10, i - 1);
  25.                         num = num % (long) Math.pow(10, i - 1);
  26.                         sum += Math.pow(temp, count);
  27.                 }
  28.                 return in == sum;
  29.         }
  30. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
水仙花数也称为自幂数,是指一个N位数,其各个数之N次方和等于该数
  1. /*求3位数的水仙花数*/
  2. class  WhileDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                  int i=100;   //设定范围,从100开始遍历,至999结束
  7.                 while (i<1000)
  8.                 {
  9.                         int a=i/100;                //求百位上的数
  10.                         int b=i/10-10*a;  //求十位上的数,也可以用 b=i%100/10;  b=i/10%10;
  11.                         int c=i%10;                        //求个位上的数
  12.                         if (a*a*a+b*b*b+c*c*c==i)
  13.                         {
  14.                                 System.out.println(i);
  15.                         }
  16.                         i++;
  17.                 }
  18.         }
  19. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
数学家闲着。。疼时发现了一个三位数,它的每位数字的三次方之和等于这个三位数,闲着。。疼的他或者她找出了所有符合这一规律的三位数,并命名凡是符合这个逻辑的三位数就叫水鲜花数(纯属猜测哈),,,楼主要是哪天也可以发现出耨个规律,也可以随便命名  什么什么花,什么什么草的
打印水鲜花的代码,我以前写过,如下:
  1. 这个算法是利用java中int类型除int类型,会把小树部分去掉
  2. 除了这个算法还可以用,分析字符串,进行转型(Integer.parseInt这个方法),这个效率没有,上面的数值运算快
  3. 代码如下:
  4. public class FlowerNumber {
  5. public static void main(String[] args) {
  6.      1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 */
  7. for (int i = 100;i < 1000;i++) {
  8. if (Number.isDaffodilsNumber(new Number(i))) {
  9. System.out.print(i + " ");
  10. }
  11. }
  12. }
  13. }
  14. class Number {
  15. private int number;
  16. public Number(int number) {
  17. this.number = number;
  18. }
  19. public static boolean isDaffodilsNumber(Number number) {
  20. int num = number.getNumber();
  21. if (num < 100 || num > 999)return false;
  22. //获得num的百位,例如345除去100等于3.45由于是int型java会把小数部位去掉就剩3了,这个算法就是使用这个原理
  23. int hundred = num / 100;
  24. //获得num的个位  通过这个操作num  / 10 * 10会把个位数变成0,然后拿num减去这个数字就拿到个位数了
  25. int unit = num - (num  / 10 * 10);
  26. //获得num的十位   通过num / 10这个操作就只保留了前两位,hundred * 10获得百位数字乘以100,减一下获得十位
  27. int decade = (num / 10) - (hundred * 10);
  28. int result = unit * unit * unit + decade * decade * decade + hundred * hundred * hundred;
  29. if (num == result)
  30. return true;
  31. return false;
  32. }
  33. public int getNumber() {
  34. return number;
  35. }
  36. public void setNumber(int number) {
  37. this.number = number;
  38. }
  39. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
public static void main(String[] args)
{
  for(int i=100;i<=999;i++)
  {
   int geWei,shiWei,baiWei;
   baiWei=i/100;
   shiWei=(i-baiWei*100)/10;
   geWei=i-baiWei*100-shiWei*10;
   if(i==geWei*geWei*geWei+shiWei*shiWei*shiWei+baiWei*baiWei*baiWei)
   {
    System.out.println(i);
   }
  }

}

回复 使用道具 举报
徐强 发表于 2012-11-8 15:33
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 ...

哈哈,解释的真不错,很有文化范
回复 使用道具 举报
佟亚鹏 发表于 2012-11-10 17:19
数学家闲着。。疼时发现了一个三位数,它的每位数字的三次方之和等于这个三位数,闲着。。疼的他或者她找出 ...

不错,数学家都是越怪异的,想法就越具有颠覆性
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马