经典JAVA题四
求一个正整数的质因数。例如:输入90,输出 90=2*3*3*5。
方法一:采用递归算法
package JAVA; import java.util.Scanner; class factor { int Fdata; factor(int dd) { Fdata = dd; ToFactor(Fdata, 2); } void ToFactor(int Td, int FacNum) { if (Td != FacNum) { if (Td % FacNum == 0) { System.out.print(FacNum + " * "); ToFactor(Td / FacNum, 2); } else { ToFactor(Td, FacNum + 1); } } else { System.out.print(FacNum); } } } public class test04_2 { public static void main(String[] args) { System.out.print("请输入一个正整数!"); Scanner sc = new Scanner(System.in); int data = sc.nextInt(); System.out.print(data+"="); new factor(data); } }
方法二:采用for循环
package JAVA; import java.util.ArrayList; import java.util.Scanner; public class test04 { /** * @param args * 将一个正整数分解质因数 */ public static void main(String[] args) { // TODO Auto-generated method stub /* * 输入一个正整数,并 找到一个最小的质因数 */ String temp; int n = 0; // 定义一个变量,用于表示输入的数值 Scanner in = new Scanner(System.in); System.out.print("请输入一个正整数!"); temp = in.next(); n = Integer.parseInt(temp.toString()); // 定义一个数组,用于保存所有的质因数 ArrayList<Integer> abc = new ArrayList<Integer>(); for (int i = 2; i < n / 2; i++) { if (n % i == 0) { abc.add(i); } } show(abc); System.out.println(); System.out.print(n + "="); display(n); } /* * 显示分解后的质因数 */ private static void show(ArrayList<Integer> abc) { System.out.println("所有质因数如下:"); for (int i = 0; i < abc.size(); i++) { System.out.print(abc.get(i) + " "); } } /* * 关键代码 */ private static void display(int n) { if(n==1){ System.out.println("n=1"); }else{ for (int i = 2; i <=n; i++) { if (n%i == 0) { System.out.print(i); n = n / i; if(n!=1){ //这个if语句解决楼上说的多一个 "* "问题 System.out.print("*"); } i--; // 防止它只除一次质因数 } if(n==1){ break; } } } } }