黑马程序员技术交流社区

标题: 小程序。。。 [打印本页]

作者: 刘占月    时间: 2012-4-8 16:03
标题: 小程序。。。
题目:将一个正整数分解质因数。例如:输入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的值,重复执行第一步。

这是上网看到的一个小程序,自己琢磨了老半天弄的直头晕。兄弟们帮帮忙。。。
作者: 邓海涛    时间: 2012-4-8 17:30
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 {
        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 19:38
邓海涛 发表于 2012-4-8 17:30
import java.util.Scanner;

public class GetPrimeNumeber {

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




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