A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李洋- 中级黑马   /  2013-12-13 21:44  /  1648 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

题目:将一个正整数分解质因数。例如:输入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的值,重复执行第一步。

请给个答案吧

评分

参与人数 1黑马币 +6 收起 理由
FFF + 6 不建议深入编程题。建议先把基础学好。.

查看全部评分

2 个回复

倒序浏览
  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了,代码中如有可优化的地方,还望指正。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
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++;
        }
     }
}

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马