求JAVA代码!!!
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5,输入80,打印出80=2*2*2*2*5.(要求不能用while语句)

解决方案 »

  1.   

    不能用while语句
    =============\
    那for行不行!?
      

  2.   

    可以,只限制用while,其他不限!
      

  3.   

    可以,只限制用while,其他不限!
    ============
      

  4.   

    。搞笑啊while(true)

    for(;true;)
    又有什么区别呢
      

  5.   

    public static String test(int n){
            StringBuffer str = new StringBuffer();
            str.append(n+"=");
            if(n<=3){
                str.append(n);
                return str.toString();
            }
                
            for(int i=2; i<=n/2; i++){
                if (n%i==0){
                    str.append(i+"*");
                    n=n/i;
                    i=1;
                }
            }
            str.append(n);
            return str.toString();
        }
      

  6.   

    怎么了?不让用while,这是条件,楼上,有区别和没区别是一回事,不让用是另一回事
    有说话的,但为什么没有写代码的?!
      

  7.   

    谢谢 melas() 
    期待其他更多不同的代码!
      

  8.   

    除了用while我没能用别的写出来,但while已经不怎么提倡了!所以求别的代码!!
      

  9.   

    static void zhi(int num)
    {
    if(num==1)
    {
    System.out.print("1");
    }
    else
    {
    for(int i=2;i<=num;i++)
    {
    if(num%i==0)
    {
    System.out.print(i+"*");
    num = num/i;
    break;
    }
    }
    zhi(num);
    }

    }
      

  10.   

    static void zhi(int num)
    {
    if(num==1)
    {
    System.out.print("1");
    }
    else
    {
    for(int i=2;i<=num;i++)
    {
    if(num%i==0)
    {
    System.out.print(i+"*");
    num = num/i;
    break;
    }
    }
    zhi(num);
    }

    }----------------
    漂亮!不过最后的*1有什么办法把它去除不……
      

  11.   

    import java.util.Scanner;class factor
    {
    int Fdata;
    factor(int dd)
    {
    Fdata = dd;
    ToFactor(Fdata,2);
    }
    void ToFactor(int Td,int FacNum)
    {
    if(Td != FacNum)
    {
    if(Td%FacNum == 0)
    {
    System.out.print(FacNum+"*");
    ToFactor(Td/FacNum,2);
    }
    else
    {
    ToFactor(Td,FacNum+1);
    }
    }
    else
    {
    System.out.print(FacNum);
    }
    }
    }
    public class ABC
    {
    public static void main(String[] args)
    {
    Scanner sc = new Scanner(System.in);
    int data = sc.nextInt();
    new factor(data);
    }
    }
      

  12.   

    beexk(我要当牛人!!!!) 
    你的程序好象会出问题,程序解出的不全是质数!!!
      

  13.   

    poorb() ( ) 你的代码nice 的不能在nice了,不过,程序启动时,应该要求输入,要不然开始感觉程序死了!
      

  14.   

    import java.util.Scanner;class factor
    {
    int Fdata;
    factor(int dd)
    {
    Fdata = dd;
    ToFactor(Fdata,2);
    }
    void ToFactor(int Td,int FacNum)
    {
    if(Td != FacNum)
    {
    if(Td%FacNum == 0)
    {
    System.out.print(FacNum+"*");
    ToFactor(Td/FacNum,2);
    }
    else
    {
    ToFactor(Td,FacNum+1);
    }
    }
    else
    {
    System.out.print(FacNum);
    }
    }
    }
    public class ABC
    {
    public static void main(String[] args)
    {
    Scanner sc = new Scanner(System.in);
    int data = sc.nextInt();
    new factor(data);
    }
    }
    ==============================================================
    顶,顶,顶……………………
    poorb() 高手!!!
    半年后达这个水平就不错了!
      

  15.   

    hxl_521() :怎么我写的那个程序会解出不全是质数呢?能不能举个例子出来呢?学习
      

  16.   

    我for了一个1到2500的...结果全是质数啊
      

  17.   

    看了beesk的解法,很是简洁巧妙,受教了,但文中只写出了主要算法,我把他的其它部分重新补充了一下,用的是最简单的语句,一般新手都能看懂,希望跟大家共同探讨探讨import javax.swing.*;
    public class Math
    {
        public static void main(String[] args) 
        {
            String input = JOptionPane.showInputDialog("请输入正整数:");/*能输出一个输入图形框*/
            int num = Integer.parseInt(input);//输入的字符串转换成整数        if (num == 1) //输入为1,直接输出
            {
                System.out.print("num=1");
            } 
            else 
            {
                System.out.print("num=");
                for (int i = 2; i <= num; i++)
                {  
                    if (num % i == 0)
                    {
                        System.out.print(i);
                        num = num / i;
                        if(num!=1)//这个if语句解决楼上说的多一个"*"问题
                        {
                            System.out.print("*");
                        }
                        i--;//防止它只除一次质因数
                    }
                    if (num == 1) //整除完后值为1跳出
                    {
                        break;                }
                }
            }
            System.exit(0);//输入的图形框结束语句
        }
    }程序在Jbuilder下能正常运行,但自己不明白一个问题,除去那个多的"*"号用"\b"退一格就行了,为什么实际操作时"\b"不起作用,但"\n"却能换行,请高手指点一下原因,关于java中退格的应用
      

  18.   

    for(int i=2;i<=num;i++)
    --> for(int i=2;i<=Math.sqrt(num);i++)
      

  19.   

    >> 除了用while我没能用别的写出来,但while已经不怎么提倡了!所以求别的代码!!无聊的理由。
      

  20.   

    用递归这样写,但效率不及循环
    public class A {
      public static void main(String[] args) {
        int n = 1000;
        getZS(n);
      }  static boolean finish = false;  public static void getZS(int n) {
        if (finish)
          return;
        int L = (int) Math.ceil(Math.sqrt(n));
        boolean b = false;
        for (int i = 2; i <= L; i++)
          if ((n % i) == 0) {
            System.out.print(i + " ");
            getZS(n / i);
            b = true;
            break;
          }
        if (!b) {
          System.out.print(n);
          finish = true;
        }
      }
    }
      

  21.   

    以下是循环写法,显然循环比较好
    public class A {
      public static void main(String[] args) {
        int n = 1000;
        int m = -1;
        do {
          m = getZS(n);
          if (m != 1) {
            n /= m;
            System.out.print(m + " ");
          } else {
            System.out.print(n);
            break;
          }
        } while (true);
      }  public static int getZS(int n) {
        int L = (int) Math.ceil(Math.sqrt(n));
        for (int i = 2; i <= L; i++)
          if ((n % i) == 0)
            return i;
        return 1;
      }
    }
      

  22.   

    public class PrimeFactor
    {
      public static void main(String[] args)
      {
        for (int i = 1; i <= 100; i ++) {
          computePrimeFactor(i);
        }
      }  public static void computePrimeFactor(int number)
      {
        System.out.print(number + " = ");    if (number < 4) {
          System.out.println(number);
        }
        else {
          for (int i = 2; i < number; i ++) {
            if (number % i == 0) {
              System.out.print(i + "*");          number = number / i;
              i = 1;
            }
          }      System.out.println(number);
        }
      }
    }
      

  23.   

    修正效率public class PrimeFactor
    {
      public static void main(String[] args)
      {
        for (int i = 1; i <= 100; i ++)
        {
          computePrimeFactor(i);
        }
      }  public static void computePrimeFactor(long number)
      {
        System.out.print(number + " = ");    if (number < 4)
        {
          System.out.println(number);
        }
        else
        {
          for (long i = 2; i <= sqrt(number); i ++)
          {
            if (number % i == 0)
            {
              System.out.print(i + "*");          number = number / i;
              i = 1;
            }
          }      System.out.println(number);
        }
      }  public static long sqrt(long number)
      {
        return Math.round(Math.sqrt(number));
      }
    }
      

  24.   

    菜鸟来鸟!
    package src;/**
     * 
     * @author cokey5614
     * 
     */
    public class main4TestFunction {    /**
         * main function 4 test
         * 
         * @param args
         *            String
         * @throws ZZSystemException
         *             ZZSystemException
         */
        public static void main(String args[]) {        int testNum = 121;
            int count = 0;
            int test = 1;
            for (int i = 0; i < testNum; i++) {
                test = test * 2;
                count++;
                if (test >= testNum)
                    break;
            }
            System.out.print(testNum + " = ");
            int toResult = testNum;
            int result = 0;
            for (int i = 0; i < count; i++) {
                if (0 == i) {
                    result = getMaxSi(toResult);
                    System.out.print(result + " * ");
                } else if (!isSi(toResult / result)) {
                    toResult = toResult / result;
                    result = getMaxSi(toResult);
                    System.out.print(result + " * ");
                } else {
                    System.out.print(toResult / result + " ");
                    break;
                }
            }
        }    public static boolean isSi(int num) {
            if (num == 2 || num == 1) return true;
            int temp = num / 2 + 1;
            for (int i = 2; i < temp; i++) {
                if (num % i == 0)
                    return false;
            }
            return true;
        }    public static int getMaxSi(int num) {
            int temp = num / 2;
            for (int i = temp; i >= 1; i--) {
                if (num % i == 0 && isSi(i)) {
                    return i;
                }
            }
            return num;
        }
    }
      

  25.   

    import java.util.Scanner;public class Factor {
    public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int data = sc.nextInt();
    factor(data,2);
    } static void factor(int num,int div) { if(num<div*2){
    System.out.println(num);
    }else{
    if(num%div==0){
    System.out.print(div+"*");
    factor(num/div,div);
    }else{
    if(div==2) {
    factor(num,div+1);
    }else{
    factor(num,div+2);
    }
    }
    }
    }
    }
      

  26.   

    poorb() 写得非常好,不过有一处在改一下会更好:
    package qujianfeng;public  class FenJieZhiYinShou {
    int Fdata;
    int count=0; FenJieZhiYinShou(int dd) {
    Fdata = dd;
    ToFactor(Fdata, 2);
    System.out.println();
    System.out.println(count);
    } void ToFactor(int Td, int FacNum) {
    if (Td != FacNum) {
    if (Td % FacNum == 0) {
    System.out.print(FacNum + "*");
    ToFactor(Td / FacNum, FacNum);//如果是2的话会导致后面的else部分被多次没用的执行

    } else {
    count++;
    ToFactor(Td, FacNum + 1);
    }
    } else {
    System.out.print(FacNum);
    }
    }
    public static void main(String[] args) {
    int data=Integer.valueOf(javax.swing.JOptionPane.showInputDialog("请输入要分解的数:")).intValue();
    new FenJieZhiYinShou(data);
    System.exit(0);
    }
    }
      

  27.   

    import java.util.*;public class Test
    {
    public static void main(String[]args){

    Test.doJob(80);
    } public static void doJob(int number){

    System.out.println(number+"=");
    List list = new ArrayList();
    calc(number, list);
    System.out.println(list);
    } public static void calc(int number, List list){
    if(number==1)return;
    int i=2;
    while(true){
    if(number%i==0){
    list.add(i);
    number = number/i;
    calc(number, list);
    break;
    }
    i++;
    }
    }
    }
      

  28.   

    我也发一个import java.io.*;public class ZhiYinShu{

    public static void main(String[] args){
    BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
    try{
    String line=in.readLine();
    int n=Integer.parseInt(line);
    ZhiYinShu.qiujie(n);
    }catch(IOException e){
    }
    }

    static void qiujie(int n){
    int i=2;
    for(;i<=n;i++)
       if(n%i==0)
                  break; 
            System.out.print(i);         
       if(n!=i) {
       System.out.print("*");  
       qiujie(n/i);
       }
          else
                System.out.print('\n');   
       return;
       }
    }
      

  29.   

    强 !!!beexk(我要当牛人!!!!) ( ) 信誉:100    Blog   果然牛人.....
    不过最后那个1能不能去掉  呵呵
      

  30.   

    static void zhi(int num)
    {
    if(num==1)
    {
    System.out.print("1");
    }
    else
    {
    out:
    for(int i=2;i<=num;i++)
    {
    if(num%i==0)
    {
    System.out.print(i);
    num = num/i;
    if(num != 1){
    System.out.print("*");
    zhi(num);
    }
    break out;
    }
    }
    }
    }最简单的 修改自beexk(我要当牛人!!!!) ( ) 信誉:100
      

  31.   


    import java.util.Scanner;
    class Demo
    {
    public static void main(String[] args) 
    {
    Scanner in=new Scanner(System.in);
    int n=in.nextInt();
    System.out.print(n+"=");
    if (n==1)
    {
    System.out.print(n);
    }else
    {
    for (int i=2; i<=n; i++)
    {
    if (n%i==0)
    {
    //System.out.println(i);
    boolean f=true;
    for (int j=2; j<i; j++)
    {
    if (i%j==0)
    {
    f=false;
    break;
    }
    }
    if (f)
    {
    System.out.print(i+"*");
    //System.out.println(n+"/"+i+"="+n/i);
    n=n/i;
    i=2; //把质数最小化,解决质数不能重复的问题。。
    }
    }
    }
    }
    }
    }
    但是有个小问题,就是后面多了一个 " * " 号