黑马程序员技术交流社区

标题: 关于遍历打印水仙花数的最优方法 [打印本页]

作者: 黑马--马超    时间: 2012-8-13 13:27
标题: 关于遍历打印水仙花数的最优方法
本帖最后由 黑马--马超 于 2012-8-13 13:29 编辑

1.打印出所有水仙花数,所谓水仙花数是指一个3位数,其各位数字立方等于该数本身.例如,153是一个水仙花数,因为153=(1的3次方+5的三次方+3的三次方)
方法1:任意数与与10求余得到最低一位数,然后在除以10减去1位,重复做3次

我个人分析这道题的关键是能将3位数的每一位取出,然后计算后判断打印;

问题:1.我通过以下三种方法实现打印3位数的水仙花数,这三种方法哪一个效率比较高?

             2.取出整数的每一位数最好的方法是什么,请提供一下简写的代码?
  1. import java.math.*;
  2. class Hello {
  3. publicstatic void main(String args[])
  4. {

  5. System.out.println("方法二一");
  6. for(inti=1;i<10;i++)
  7. {
  8. for(intj=0;j<10;j++)
  9. {
  10. for(intk=0;k<10;k++)
  11. {

  12. if(Math.pow(i,3)+Math.pow(j,3)+Math.pow(k,3)==i*100+j*10+k)
  13. System.out.println(i+""+j+""+k);        
  14. }
  15. }        

  16. }
  17. System.out.println("方法二:");
  18. for(inti=100;i<1000;i++)
  19. {
  20. inttemp1 =i%10;
  21. inttemp2 =(i/10)%10;
  22. inttemp3 =(i/100)%10;

  23. if(Math.pow(temp1,3)+Math.pow(temp2,3)+Math.pow(temp3,3)==i)
  24. System.out.println(i);        

  25. }
  26. System.out.println("方法三:");
  27. String[] arr = new String [900];
  28. int num= 100;
  29. for(inti=0;i<arr.length;i++)
  30. {
  31. arr=(num++)+"";
  32.       Integera = new Integer(arr.substring(0,1));
  33.          Integerb = new Integer(arr.substring(1,2));
  34.          Integerc = new Integer(arr.substring(2,3));
  35.          if(Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3)==a*100+b*10+c)
  36. System.out.println(arr);
  37. }

  38. }
  39. }
复制代码

作者: 官文昌    时间: 2012-8-13 14:14
大学算法没学好,都忘了怎样算效率了~~
也许老师的观点不对,但是我很赞成,他说如果你学习java,算法就没必要花太多精力了,因为了java都把最好的算法封装起来了,我们只需要调用就可以了。
你可以看看下面这篇文章,专门讲水仙花的~~
http://blog.csdn.net/clariones/article/details/5933035
作者: 黑马--马超    时间: 2012-8-13 14:25
官文昌 发表于 2012-8-13 14:14
大学算法没学好,都忘了怎样算效率了~~
也许老师的观点不对,但是我很赞成,他说如果你学习java,算法就没 ...

Thank you.
作者: 李祖庆    时间: 2012-8-13 14:28
算法还是要学学的,它是一种编程思维的锻炼
作者: 张_涛    时间: 2012-8-13 15:12
官文昌 发表于 2012-8-13 14:14
大学算法没学好,都忘了怎样算效率了~~
也许老师的观点不对,但是我很赞成,他说如果你学习java,算法就没 ...

不是算法不用学了,我们直接调用就可以。
你总用别人的,自己有的时候不写个util,小工具类么?
老师的观点是:当你把Java中的集合哪些看懂了,算法就懂了!不用很专门去学习!
作者: 李知伦    时间: 2012-8-13 16:25
本帖最后由 李知伦 于 2012-8-13 16:31 编辑

方法三好像编译不过啊
混淆了String[]和String的概念

    System.out.println("方法三:");
    String arr ="";
    int num= 100;
    for(int i=0;i<900;i++)
        {
                arr=(num++)+"";
                Integer a = new Integer(arr.substring(0,1));
                Integer b = new Integer(arr.substring(1,2));
                Integer c = new Integer(arr.substring(2,3));
                if(Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3)==a*100+b*10+c)
                System.out.println(arr);
        }

如果一定要用数组(好像相对比较占资源吧)
    System.out.println("方法三:");
    String[] arr = new String [900];
    int num= 100;
    for(int i=0;i<arr.length;i++)
    {
        arr=(num++)+"";
        Integer a = new Integer(arr.substring(0,1));
        Integer b = new Integer(arr.substring(1,2));
        Integer c = new Integer(arr.substring(2,3));
        if(Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3)==a*100+b*10+c)
        System.out.println(arr);
    }


作者: 黑马--马超    时间: 2012-8-13 16:43
李知伦 发表于 2012-8-13 16:25
方法三好像编译不过啊
混淆了String[]和String的概念

我用String,主要想练习一下String类中的功能




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