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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

15 个回复

倒序浏览
咦~没有人吗?沙发~不要想的那么复杂。
package it.cast.suiyi;

import java.util.ArrayList;
import java.util.Scanner;

public class fenjie {
        public static void main(String[] args) {
                //获取正整数
                System.out.println("请输入一个正整数:");
                Scanner sc = new Scanner(System.in);
                int number = sc.nextInt();
                fj(number);
        }
        public static void fj(int n){
                //创建一个存放因数的集合       
                ArrayList<Integer> ys = new ArrayList<Integer>();
                int m = n;
                //判断是否为因数
                for(int i=2;i<m;i++){
                        if(n%i == 0){
                                ys.add(i);
                                n = n/i;
                                i =1;
                        }
                }
                //遍历并重写集合
                String jg = m+"=";
                for(int i=0;i<ys.size();i++){
                        if(i==ys.size()-1){
                                jg += ys.get(i);
                        }else{
                                jg += ys.get(i)+"*";
                        }
                }
                System.out.println(jg);
        }
}
回复 使用道具 举报
啊咧,第一步给漏掉了,不好意思啊,我把方法重写了下
public static void fj(int n){
                //创建一个存放因数的集合       
                ArrayList<Integer> ys = new ArrayList<Integer>();
                int m = n;
                //判断是否为因数
                int count = 0;
                for(int i=2;i<m;i++){
                        if(n%i == 0){
                                ys.add(i);
                                n = n/i;
                                i =1;
                                count++;
                        }
                }
                if(count ==0){
                        System.out.println(m);
                }else{
                        //遍历并重写集合
                        String jg = m+"=";
                        for(int i=0;i<ys.size();i++){
                                if(i==ys.size()-1){
                                        jg += ys.get(i);
                                }else{
                                        jg += ys.get(i)+"*";
                                }
                        }
                        System.out.println(jg);
                       
                }
        }
回复 使用道具 举报
感觉编程还是要多看别人的代码啊,很多时候感觉脑子转不过来
回复 使用道具 举报
好复杂啊!
回复 使用道具 举报
感觉不用这么复杂, 是前七天的课程的练习题
回复 使用道具 举报
rglyx 初级黑马 2016-9-25 23:46:40
7#
qihaichengtian 发表于 2016-9-25 22:54
感觉不用这么复杂, 是前七天的课程的练习题

还好啦,学完就会觉得这部分是最简单的了
回复 使用道具 举报
表示数学题不会做。。。不过这个题思路都给了,如何找最小质数,就从2开始递增到你输入的数取模,就是思路三,==0就表示找到了k,在依次判断
回复 使用道具 举报
好像好厉害的样子啊。
回复 使用道具 举报
我觉得这个题跟另外一个题有点类似
给两个数m 和 n  从数列1 , 2 , 3....n中随意取几个数 使其和等于m 要求将其中所有的可能组合列出来
回复 使用道具 举报
好像有点意思
回复 使用道具 举报
你确定老师都不会做么。。。
回复 使用道具 举报
Da_xigua 来自手机 初级黑马 2016-9-30 22:55:43
13#
哈哈哈,厉害
回复 使用道具 举报
CreScert 来自手机 中级黑马 2016-9-30 23:10:59
14#
如果之前我学过面向过程的算法,比如c语言,这道题不难。反正我看不难。有机会过几天发代码
回复 使用道具 举报
老师是不想告诉你
回复 使用道具 举报
这道题可以和找出指定范围的质数一起思考着做,很有艺术
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马