正整数分解
题目:将一个正整数分解质数。例如:输入90,打印出90=2*3*3*5;
思路:对number进行分解质因数,应先找到一个最小的质数K,然后按照下述步骤完成:
- 如果这个质数K恰好等于number,则说明分解因数的过程已经结束,打印出当前的K。
- 如果K小于number,而且number还可以将k整除,那么应该打印当前的k,并取number除以k的商,作为新的正整数number。
- 如果number不能够被k整除,那么k++。然后重复执行第一步。
代码:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class test {
public static void decompositionFactor(int number){
int k = 2;
//list保存number所以的正质因数
List<Integer> list = new ArrayList<Integer>();
list.add(number);
while(k<=number){
if(k==number){
list.add(k);
break;
}else if (number%k == 0) {
list.add(k);
number = number/k;
}else {
k++;
}
}
//打印结果语句
StringBuffer str = new StringBuffer();
str.append(list.get(0)+" = ");
list.remove(0);
int last = list.get(list.size()-1);
for(int a:list){
if(a == last){
str.append(a);
}else{
str.append(a+"*");
}
}
System.out.println(str);
}
public static void main(String[] args) {
while(true){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个正整数");
String n = scanner.next();
if(n.equals("exit")){
System.out.println("正在退出程序!!!!");
break;
}else{
//使用正则匹配判断从Console控制台输入的值是否全为数值
String pattern = "^[0-9]*$";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(n);
if(m.find()){
int number = Integer.parseInt(n);
test.decompositionFactor(number);
}else{
System.out.println("您输入的格式有误!请重新输入");
}
}
}
}
}
核心代码:
while(k<=number){
if(k==number){
list.add(k);
break;
}else if (number%k == 0) {
list.add(k);
number = number/k;
}else {
k++;
}
}
运行结果
以上内容若有误或者有表述不当的地方欢迎指出!!!