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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘占月 中级黑马   /  2012-4-8 16:03  /  2144 人查看  /  5 人回复  /   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的值,重复执行第一步。

这是上网看到的一个小程序,自己琢磨了老半天弄的直头晕。兄弟们帮帮忙。。。

5 个回复

倒序浏览
import java.util.Scanner;

public class GetPrimeNumeber {
        public static void main(String[] args) {
                System.out.println("请输入需要被分解的整数n:");
                Scanner s = new Scanner(System.in);
                int n = s.nextInt();
                int k = 2;
                boolean flag = true ;
                if (n == 2) {
                        System.out.println("分解质因数过程已经结束!");
                        return;
                }
                while (flag) {

                        if (n % k == 0) {
                                System.out.println(k);
                                n = n / k;
                                if (n % k != 0) {
                                        k++;
                                        if(k>n){
                                                flag = false ;
                                                if(n!=1){
                                                        System.out.println(n);
                                                }
                                        }
                                }
                                //System.out.println(n);
                        }else{
                                k++ ;
                                if(k>n){
                                        flag = false ;
                                }
                        }
                }
        }
}


哥们,时间仓促啊,我只是把实现分解的代码给你写出来了,但是90=2*3*3*5的这个样式你应该没问题的,你先参考下吧,代码不懂的地方给我说

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
import java.util.Scanner;

public class GetPrimeNumeber {
        public static void main(String[] args) {
                System.out.println("请输入需要被分解的整数n:");
                Scanner s = new Scanner(System.in);
                int n = s.nextInt();
                int k = 2;
                boolean flag = true ;
                if (n == 2) {
                        System.out.println("分解质因数过程已经结束!");
                        return;
                }
                while (flag) {

                        if (n % k == 0) {
                                System.out.println(k);
                                n = n / k;
                                if (n % k != 0) {
                                        k++;
                                        if(k>n){
                                                flag = false ;
                                                if(n!=1){
                                                        System.out.println(n);
                                                }
                                        }
                                }
                                //System.out.println(n);
                        }else{
                                k++ ;
                                if(k>n){
                                        flag = false ;
                                }
                        }
                }
        }
}


哥们,时间仓促啊,我只是把实现分解的代码给你写出来了,但是90=2*3*3*5的这个样式你应该没问题的,你先参考下吧,代码不懂的地方给我说
回复 使用道具 举报
邓海涛 发表于 2012-4-8 17:30
import java.util.Scanner;

public class GetPrimeNumeber {

额  谢谢 我先看看。   我之前一直想的是用递归着,结果绕的我头都大了。
回复 使用道具 举报
恩,递归还是可以的,不过我劝你还是尽量避免使用递归调用
   因为递归调用在操作时如果处理不好,则有可能出现内存的溢出,所以对于这种方法调用形式使用时要谨慎!!!
回复 使用道具 举报
看完楼主的帖子,我的心情竟是久久不能平复,正如老子所云:大音希声,大象希形。我现在终于明白我缺乏的是什么了,正是楼主那种对真理的执着追求和楼主那种对理想的艰苦实践所产生的厚重感。面对楼主的帖子,我震惊得几乎不能动弹了,楼主那种裂纸欲出的大手笔,竟使我忍不住一次次的翻开楼主的帖子,每看一次,赞赏之情就激长数分,我总在想,是否有神灵活在它灵秀的外表下,以至能使人三月不知肉味,使人有余音穿梁,三日不绝的感受。楼主,你写得实在是太好了。我唯一能做的,就只有把这个帖子顶上去这件事了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马