package com.it;
import javax.swing.JOptionPane;
/*
* 正整数分解质因数
* 题目:
* 将一个正整数分解质因数.例如:户三人90,打印出90=2*3*3*5.
*
* 需求分析:
* 对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
* 1).如果这个质数恰等于n,则说明分解质因数的过程已结束,打印出即可.
* 2).如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数,重复执行第一步;
* 3).如果n不能被k整除,则用k+1作为k的值,重复执行第一步.
*/
public class ResolvePrimeNumber {
// 公有无参构造方法
public ResolvePrimeNumber() {
}
//递归方法
public void getPositive(int n) {
//for循环,从2开始,i要小于等于n/2的商,i++
for (int i = 2; i <= n/2 ; i++) {
//判断n%i余数为0
if (n%i==0) {
System.out.print(i+"*");
//方法的内部调用方法本身
getPositive(n/i);
}
}
System.out.print(n);
//没有满足上面的条件:i <= n/2就转到了下面的出口
//终止当前的虚拟机,System:static void exit(int status)
System.exit(0);
}
//主方法
public static void main(String[] args) {
//定义字符串
String str = "";
//创建对象
ResolvePrimeNumber rpn = new ResolvePrimeNumber();
//JOptionPane:static String showInputDialog(Object message)
str = JOptionPane.showInputDialog("请输入N的值(输入exit退出):");
//定义变量
int positive = 0;
//包裹可能出现问题的代码
try {
positive = Integer.parseInt(str);
//定义异常对象:NumberFormatException
} catch (NumberFormatException e) {
//将此 throwable及其追踪输出至标准错误流,异常根类Throwable:void printStackTrace()
e.printStackTrace();
}
System.out.print(positive+"分解质因数: "+positive+"=");
//调用方法
rpn.getPositive(positive);
}
}