黑马程序员技术交流社区

标题: 编程题。 [打印本页]

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

请给个答案吧


作者: 熊猫86    时间: 2013-12-14 01:35
  1. package test;

  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. import java.util.List;

  5. public class YueShuTest {

  6.         public static void main(String[] args) {
  7.                 // TODO Auto-generated method stub
  8.                 int num = 90;
  9.                 PrintYueShu pys = new PrintYueShu();
  10.                 pys.PrintValue(new YueShu().getYueShu(num), num);

  11.         }

  12. }
  13. //定义一个类,封装一个存约数的方法,该方法以集合的形式记录该数的约数
  14. class YueShu {
  15.        
  16.         public List<Integer> getYueShu(int num) {
  17.                 List<Integer> al = new ArrayList<Integer>();
  18.                 if(num<2)
  19.                         throw new RuntimeException("数字有误,不存在约数");
  20.                 for(int x =2;num>=x; x++) {
  21.                         while(num%x==0) {
  22.                                 al.add(x);
  23.                                 if(num!=1)
  24.                                         num = num/x;
  25.                                 else
  26.                                         al.add(num);
  27.                                 }               
  28.                         }
  29.                
  30.                 return al;       
  31.         }
  32. }
  33. //定义一个类,封装打印约数的方法(传入一个集合及一个数字)
  34. class PrintYueShu {
  35.         public void PrintValue(List<Integer> al,int num){
  36.                 Iterator<Integer> it = al.iterator();//用迭代器输出集合中的约数,并打印相应格式
  37.                 System.out.print(num+"=");
  38.                 while(it.hasNext()) {
  39.                         int i =it.next();
  40.                         if(it.hasNext())
  41.                                 System.out.print(i+"*");
  42.                         else
  43.                                 System.out.println(i);
  44.                 }
  45.                
  46.         }
  47. }
复制代码
以上基本可以完成需求~
异常处理没有考虑太多,直接抛RuntimeException了,代码中如有可优化的地方,还望指正。
作者: ζ丶凡σ    时间: 2013-12-14 16:36
import java.util.*;
public class Demo
{
    public static void main(String[] args)
        {
        Scanner s = new Scanner(System.in);
        System.out.print( "请键入一个正整数:");
        int n = s.nextInt();
        int k=2;
        System.out.print(n + "=" );
        while(k <= n)
                {
          if(k == n)
                          {System.out.println(n);break;}
            else if( n % k == 0)
                                {
                                        System.out.print(k + "*");n = n / k;
                                }
                 else  k++;
        }
     }
}





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