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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 看海的管家 中级黑马   /  2015-10-11 20:47  /  926 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

4 个回复

倒序浏览
/* 分解质因数  从键盘上输入一个数,并将他分解成最小质因数积的形式  思路:    一:首先导入包,这样才能实现键盘输入数           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'+"我做对了么?");         }     } }
回复 使用道具 举报
表示看完代码还是完全不懂是什么鬼
回复 使用道具 举报
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;
        }
}
回复 使用道具 举报
请教了,虽然看不大懂
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马