天天看點

【筆試】6、求其最大公約數和最小公倍數

/**
 * 題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。   在循環中,隻要除數不等于0,用較大數除以較小的數,
 * 		将小的一個數作為下一輪循環的大數,取得的餘數作為下一輪循環的較小的數,
 * 		如此循環直到較小的數的值為0,傳回較大的數,此數即為最大公約數,最小公倍數為兩數之積除以最大公約數。
 * 時間:2015年7月28日09:00:05
 * 檔案:lianxi06.java
 * 作者:cutter_point
 */
package bishi.zuixin50.t2015728;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;

public class lianxi06 
{
	//我們用輾轉相除法來求最大公約數
	public static int GreatestCommonDivisor(int m, int n)
	{
		//首先我們假定一個餘數是最大公約數
		int chushu = m % n;	//兩數的餘數,要麼就是最大公約數,要麼就是一個除數
		int beichu = n; //這個是我們接下來的被除數
		while(chushu != 0)
		{
			//當餘數不為0的時候,說明還沒有到最大公約數
			int temp = chushu; //我們把除數備份
			chushu = beichu % chushu; //求得新的除數
			beichu = temp;  //吧原來的除數作為新的被除數
		}
		
		//指導除數為0的時候說明到了最後的結果,最大公約數就是此時的被除數
		return beichu;
	}
	
	//最大公倍數=兩數的積/最大公約數
	public static int LeaseCommonMultiple(int m, int n)
	{
		//求得最大公約數
		int greatestCommonDivisor = lianxi06.GreatestCommonDivisor(m, n);
		
		return (m * n) / greatestCommonDivisor;		
	}
	
	public static void main(String[] args) throws Exception
	{
		//System.out.println(System.getProperty("java.class.path"));
		//System.out.println(new lianxi06().getClass().getProtectionDomain().getCodeSource().getLocation());
		//我們從檔案中讀取相應的資料
		FileInputStream infile = new FileInputStream(new File("source/zuixin50/lianxi06input.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(infile, "utf-8"));
		//我們把結果輸出到相應的檔案
		FileOutputStream fos = new FileOutputStream(new File("source/zuixin50/lianxi06output.txt"));
		//讀取一行資料
		String line = "";
		while( ( line = br.readLine() ) != null )
		{
			//每行資料我們用“\t”隔開
			String a[] = line.split("\t");
			int m, n;
			//吧這兩個數轉化為整數
			m = Integer.parseInt(a[0]);
			n = Integer.parseInt(a[1]);
			String out = m + " 和 " + n + "的最大公約數是:" + lianxi06.GreatestCommonDivisor(m, n) + "\n" 
					+ "\t最小公倍數是:" + lianxi06.LeaseCommonMultiple(m, n) + "\n";
			System.out.println(out);
			fos.write(out.getBytes());
		}	
		//關閉流
		fos.close();
		br.close();
		infile.close();
	}
}