黑马程序员技术交流社区

标题: 水仙花数的另外一种思路,不过貌似效率不高 [打印本页]

作者: 任文龙    时间: 2015-7-10 22:35
标题: 水仙花数的另外一种思路,不过貌似效率不高
  1. /*
  2.         需求:水仙花数是三位数,个十百位每一个数字的立方和等于该数本身。打印所有的水仙花数字。
  3.         思路:
  4.                 A:将水仙花数视为主体,取出个十百三位数字,方法为除10、模10,进行规则判定。
  5.                 B:换一种思路,将三位数视为个十百三个数位的数字组成,进行规则判定后组合成三位数。
  6.                 C:判断该数是否符合水仙花数的规则,符合则输出。
  7. */

  8. class Flower {
  9.         public static void main(String[] args) {
  10.                 //利用三层循环控制个十百位上的数字变化
  11.                 for (int bai =1;bai<=9 ;bai++ ) {
  12.                         for (int shi=0;shi<=9 ;shi++ ) {
  13.                                 for (int ge=0;ge<=9 ;ge++ ) {
  14.                                         if (ge*ge*ge+shi*shi*shi+bai*bai*bai==100*bai+10*shi+ge) {
  15.                                                 System.out.println(100*bai+10*shi+ge);
  16.                                         }
  17.                                 }
  18.                         }
  19.                 }
  20.         }
  21. }
复制代码


作者: 任文龙    时间: 2015-7-10 23:08
n361204357 发表于 2015-7-10 22:54
  • 我感觉这个思路很清晰,不用取模之类,思路上不用过多的考虑。
  • 这面是我总结的几个方法:
  • class  ...

  • 就是觉得取模不太容易想到
    作者: 453203489    时间: 2015-7-11 00:09
    求立方在MATH中有专门的,   Java提供求n次方的方法:java.lang.Math.pow(a, b);其表示为a的b次方。
    作者: fmi110    时间: 2015-7-11 10:25
    我觉的楼主的这种方法效率比第一种高一点点呢,省去了除法运算
    作者: 18671183990    时间: 2015-7-11 11:56
    经过运算测试  无论是取模还是利用for循环的方式,两种方法运算的时间都为2毫秒,有时甚至第一种方法更快,只需要一毫秒,实际差别不大。
    作者: 游呤人    时间: 2015-7-11 13:23
    其实还是挺厉害的
    作者: 任文龙    时间: 2015-7-11 20:29
    18671183990 发表于 2015-7-11 11:56
    经过运算测试  无论是取模还是利用for循环的方式,两种方法运算的时间都为2毫秒,有时甚至第一种方法更快, ...

    有什么工具能看到运算的时间吗?刚开始学,还不清楚
    作者: 康恒强    时间: 2015-7-11 20:47
    好想法,,
    作者: 18671183990    时间: 2015-7-12 23:32
    任文龙 发表于 2015-7-11 20:29
    有什么工具能看到运算的时间吗?刚开始学,还不清楚

    abstract class  GetTime
    {
            public final void getTime()
            {
                    long start=System.currentTimeMillis();// 获取时间
                    run();
                    long end=System.currentTimeMillis();//获取时间
                    System.out.println("程序运行的时间为:"+(end-start)+"ms"); //获取内容程序运行的时间
           
            }
            public abstract void play();
            public abstract void run();//在此程序中,该抽象方法被子类改写;
    }
    class GetTimeDemo extends GetTime
    {
            public  void play(){}
            public void run()
            {
                    for(int i=0;i<10000;i++)
                    {
                            System.out.print(i+"\t");
                    }
                    System.out.println();
            }
    }
    class GetTimeTest
    {
            public static void main(String[] args)
            {

                    GetTimeDemo s=new GetTimeDemo();
                    s.getTime();
            }
    }
    我也才开始学,查一下API吧,加油吧




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