黑马程序员技术交流社区
标题: 关于遍历打印水仙花数的最优方法 [打印本页]
作者: 黑马--马超 时间: 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.取出整数的每一位数最好的方法是什么,请提供一下简写的代码?
- import java.math.*;
- class Hello {
- publicstatic void main(String args[])
- {
- System.out.println("方法二一");
- for(inti=1;i<10;i++)
- {
- for(intj=0;j<10;j++)
- {
- for(intk=0;k<10;k++)
- {
- if(Math.pow(i,3)+Math.pow(j,3)+Math.pow(k,3)==i*100+j*10+k)
- System.out.println(i+""+j+""+k);
- }
- }
- }
- System.out.println("方法二:");
- for(inti=100;i<1000;i++)
- {
- inttemp1 =i%10;
- inttemp2 =(i/10)%10;
- inttemp3 =(i/100)%10;
- if(Math.pow(temp1,3)+Math.pow(temp2,3)+Math.pow(temp3,3)==i)
- System.out.println(i);
- }
- System.out.println("方法三:");
- String[] arr = new String [900];
- int num= 100;
- for(inti=0;i<arr.length;i++)
- {
- arr=(num++)+"";
- Integera = new Integer(arr.substring(0,1));
- Integerb = new Integer(arr.substring(1,2));
- Integerc = 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 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 |