当前位置: 代码迷 >> Java相关 >> JAVA每周一题(3)-----水仙花数
  详细解决方案

JAVA每周一题(3)-----水仙花数

热度:183   发布时间:2010-06-28 09:29:49.0
JAVA每周一题(3)-----水仙花数
求100-999中的水仙花数,(若三位数abc,abc=a^3+b^3+c^3, 则称abc为水仙花数。如153,1^3+5^3+3^3=1+125+27=153,则153是水仙花数)
搜索更多相关的解决方案: JAVA  水仙花  

----------------解决方案--------------------------------------------------------
我X,搞这种。
----------------解决方案--------------------------------------------------------
以下是引用谁与争疯在2010-6-28 10:16:21的发言:

我X,搞这种。
你是来结婚的吗?
----------------解决方案--------------------------------------------------------
public class FlowerNumber {
    public static void main(String[] args){
        System.out.println("100~999之间的水仙花数是:");
        for(int custNo=100;custNo<=999;custNo++){
            int geWei=custNo%10;
            int shiWei=custNo/10%10;
            int baiWei=custNo/100%10;
            if(custNo==geWei*geWei*geWei+shiWei*shiWei*shiWei+baiWei*baiWei*baiWei){
                System.out.println(custNo);
            }
        }
    }
}


============================
0~999之间的水仙花数是:
153
370
371
407
----------------解决方案--------------------------------------------------------
以下是引用wy19860426在2010-6-28 19:13:30的发言:

public class FlowerNumber {
    public static void main(String[] args){
        System.out.println("100~999之间的水仙花数是:");
        for(int custNo=100;custNo<=999;custNo++){
            int geWei=custNo%10;
            int shiWei=custNo/10%10;
            int baiWei=custNo/100%10;
            if(custNo==geWei*geWei*geWei+shiWei*shiWei*shiWei+baiWei*baiWei*baiWei){
                System.out.println(custNo);
            }
        }
    }
}


============================
0~999之间的水仙花数是:
153
370
371
407
打错了,是100~999之间
----------------解决方案--------------------------------------------------------
程序代码:
import java.util.Scanner;

public class shuixianhua
{
    public static void main(String[] args)
    {
    int x=100,i,a,b,c;
    for(;x<=999;x++)
        {
        a=x%10;b=((x-a)%100)/10;c=(x-b*10-a)/100;/*a为个位,b为十位,c为百位*/      
        if(x==(Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3)))
        System.out.print(x+"\t");
        }
   
    }
}

----------------解决方案--------------------------------------------------------
程序代码:
//水仙花数
class Daffodils {
    public static boolean isDaffodils(int a) {  //判断是否水仙花数
        int hundred = a / 100 % 10;
        int ten = a / 10  % 10;
        int unit = a % 10;
        return (a == hundred*hundred*hundred + ten*ten*ten + unit*unit*unit) ? true : false;
    }
  public static void printDaffodils(int a, int b) {   //输出从a到b的水仙花数
      for (int i = a; i <= b; i++) {
          if (Daffodils.isDaffodils(i))   
            System.out.println(i);
        }
    }
}

public class MyClass {
    public static void main(String[] args) {
        int from = 100, to = 999;      //从 100 到 999
        System.out.println("以下是您要的水仙花数 从" + from + "到" + to);
        Daffodils.printDaffodils(from, to);
    }
}
//欢迎拍砖,谢谢

----------------解决方案--------------------------------------------------------
程序代码:
import java.util.Scanner;

public class NarcissisticNumber
{
    static int place(int s)
    {
        int i=0;
        for(;s!=0;i++)
        {
            s/=10;
        }
        return i;
    }
    static void action(int s,int e)
    {
        int c=0,n;
        for(int i=s;i<=e;i++)
        {
            int sum=0,t=i;
            n=NarcissisticNumber.place(t);
            for(;t!=0;)
            {
                sum+=Math.pow(t%10,n);
                t/=10;
            }
            if(i==sum)
            {
                c++;
                System.out.println(i+"是水仙花数。");
            }
        }
        if(0==c)
        {
            System.out.println(s+"到"+e+"区间内没有水仙花数。");
        }
    }
    static boolean judge(int s)
    {
        int sum=0,n;
        n=NarcissisticNumber.place(s);
        for(int i=0,t=s;t!=0;i++)
        {
            sum+=Math.pow(t%10, n);
            t/=10;
        }
        if(s==sum)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    /**
     *
@param args
     
*/
    public static void main(String[] args)
    {
        Scanner in=new Scanner(System.in);
        
        System.out.println("请输入你要判断水仙花数的起始数字");
        int s=in.nextInt();
        System.out.println("请输入你要判断水仙花数的末数字,若只判断一个数是否为水仙花数,请输入1");
        int e=in.nextInt();
        if(e==1|s==e)
        {
            if(NarcissisticNumber.judge(s))
            {
                System.out.println(s+"是水仙花数。");
            }
            else
            {
                System.out.println(s+"不是水仙花数。");
            }
        }
        else
        {
            NarcissisticNumber.action(s,e);
        }
    }
}
这个是我老早以前写的   不管几位都能测
----------------解决方案--------------------------------------------------------
大家的思路都是把一个数按位拆开来运算的。怎么没有人反过来,按组合来做啊。比如153.就是由数字1,5,3组合起来的
只要满足a^3+b^3+c^3 = a*100+b*10+c就行了。从效率来讲,这样会好一点。
----------------解决方案--------------------------------------------------------
回复 9楼 linjx0123
因为拆分感觉比较直观,按照这种思路应该怎么写呢?谢谢指教!
----------------解决方案--------------------------------------------------------
  相关解决方案