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

	}
}

 

posted @ 2011-11-14 16:52  月亮的影子  阅读(163)  评论(0编辑  收藏  举报