经典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;
}
}
}
}
}

浙公网安备 33010602011771号