黑马程序员技术交流社区

标题: 关于一道编程题 [打印本页]

作者: 看海的管家    时间: 2015-10-11 20:47
标题: 关于一道编程题
将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
作者: CHENVICTORY    时间: 2015-10-11 21:41
/* 分解质因数  从键盘上输入一个数,并将他分解成最小质因数积的形式  思路:    一:首先导入包,这样才能实现键盘输入数           A:import        java.util.scanner               B: 定义函数                 Scanner sc= new scanner(System.in);          C:  num=sc.nextInt(); 二:     利用for循环找出此数的质因子 三:  输出    */            import        java.util.Scanner;  class  FenJieDemo {         public static void main(String[] args)             {                 while(true){                 int num,i;         Scanner sc= new Scanner(System.in);         System.out.println("请输入一个需要分解的数:");       num=sc.nextInt();         System.out.println("已录入,下面为结果:");         System.out.print(num+"=");         if(num==1)                 {System.out.println(num+"既不是质数也不是和数");}         else if(num>1)                 {for(i=2;i<=num;i++)                 {if(num%i==0)                           {if(num>i)                                 { System.out.print(i+"*");                       num=num/i;                                   i--;                             }                          if(i==num)             System.out.println56(i);                    }              }                  }                                    else            System.out.println("你在耍我!");                  //System.out.println('\n'+"我做对了么?");         }     } }
作者: iceknc    时间: 2015-10-11 22:34
表示看完代码还是完全不懂是什么鬼
作者: 史世锋    时间: 2015-10-12 11:01
public class Test068
{

        /**将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
         *
         * 思路:
         * 1.我们先把质数存放在一个数组内,以为没有办法通过程序获得所有质数,我们这里手动的把部分质数添加进数组。
         *
         * 2.用正整数对数组内的第一个质数取模,如果结果是0,则表明能整除。
         *                                 90%2=0,表明90能被2整除,90/2=45,那么2就是其中的一个质因数
         *                            如果结果不是0,则对数组内的第二个质数取模,直至出现结果为0
         *
         * 3.拿余数对数组内的第一个质数取模,如果结果是0,则表明能整除。
         *                                 45%2 != 0,表明45不能被2整除,2就不是质因数
         *                            如果结果不是0,则对数组内的第二个质数取模,直至出现结果为0
         *                                 45%3=0,表明45能被3整除,45/3=15,那么3就是其中的一个质因数
         *              
         * 4.继续对余数进行操作,直至余数等于数组内的一个质数,说明该余数不能再被拆分了
         *
         * 5.通过思路我们可以看出这是个递归动作。
         * @param args
         */
        public static void main(String[] args)
        {
                int[] arr = new int[]{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47};
                StringBuilder sb = new StringBuilder();
                int num = 16;
                sb = getPrime(num, arr, sb);
                System.out.println(num +"="+ sb.deleteCharAt(sb.length()-1).toString());
        }
       
        //定义一个函数用来求质因数,num接受一个正整数,arr接受存放质数的数组,sb存放质因数
        public static StringBuilder getPrime(int num, int[] arr, StringBuilder sb)
        {
                for(int x = 0; x < arr.length; x++)
                {
                        //判断正整数对质数取模是否零,如果为零,则执行if语句的代码块
                        if(num % arr[x] == 0) //当num =1的时候,if语句不成立就会跳出递归
                        {
                                //将余数传给getPrime()方法,继续递归。
                                getPrime(num/arr[x], arr, sb);
                       
                                //将这个质数存入sb
                                sb.append(arr[x] + "*");
                               
                                //找到质数,就不再进行循环判断后面的质数。
                                break;
                        }
                }
                return sb;
        }
}

作者: 看海的管家    时间: 2015-10-12 23:23
请教了,虽然看不大懂




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