`
方XiRui
  • 浏览: 18832 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JAVA经典算法40题(2)

阅读更多

【程序3】题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

public class exp2{
    public static void main(String args[]){
        int i=0;
        math mymath = new math();
        for(i=100;i<=999;i++) 
            if(mymath.shuixianhua(i)==true)
                System.out.println(i);
    }
}
class math{
    public boolean shuixianhua(int x){
        int i=0,j=0,k=0;
        i=x / 100;
        j=(x % 100) /10;
        k=x % 10;
        if(x==i*i*i+j*j*j+k*k*k)
            return true;
        else
            return false;
    }
}

 【程序4】题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

public class Test{
    public Test(){}
    public void fengjie(int n){ 
        for(int i=2;i<=n/2;i++){
            if(n%i==0){
                System.out.print(i+"*");
                fengjie(n/i);
            }
        }
        System.out.print(n);
        System.exit(0);///不能少这句,否则结果会出错
    }
    public static void main(String[] args){
        String str="";
        Test c=new Test();
        str=javax.swing.JOptionPane.showInputDialog("请输入N的值(输入exit退出):");
        int N;
        N=0;
        try{
            N=Integer.parseInt(str);
        }catch(NumberFormatException e){
            e.printStackTrace();
        }
        System.out.print(N+"分解质因数:"+N+"=");
        c.fengjie(N);
   }
}

 

 

 

分享到:
评论
1 楼 西铁城 2013-02-20  
第二个程序可以加个对exit的判断,不然是以发生异常而终止的。若是这样的话,输入任何字符都可以达到了同样的目的了。
if(str.equalsIgnoreCase("exit"))
        System.exit(0);

相关推荐

Global site tag (gtag.js) - Google Analytics