package j1.lesson09;
import java.io.*;
/**
* 課題0902 - 解答例.
* @author s.arakawa
* @version $Id: LowestTerm_java.rps,v 1.1 2006/03/06 12:56:15 java2005 Exp $
*/
public class LowestTerm {
/**
* コンソールから整数で分子と分母を入力させ、その既約分数を表示するプログラム。
* @param args 無視される
* @throws IOException 入力時に例外が発生した場合
*/
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("分子を入力:");
int n = Integer.parseInt(reader.readLine());
if (n < 1) {
System.out.println("1以上の整数を入力してください");
return;
}
System.out.print("分母を入力:");
int d = Integer.parseInt(reader.readLine());
if (d < 1) {
System.out.println("1以上の整数を入力してください");
return;
}
printWithReduce(n, d);
}
/**
* 引数で与えられた分子、分母を既約分数として表示する。
* 分子、分母共に1以上の整数が与えられるものとして、それ以外の場合は考慮しない。
* 既約分数へ変換するには、分子分母をそれらの最大公約数でそれぞれ割ってやればよい。
* @param numerator 分子
* @param denominator 分母
*/
public static void printWithReduce(int numerator, int denominator) {
int gcd = gcd(numerator, denominator);
numerator /= gcd;
denominator /= gcd;
System.out.println(numerator + " / " + denominator);
}
/**
* 引数で与えられた2つの整数の最大公約数を返す。
* <code>m, n</code> が負の値であった場合は考慮しなくて良い。
* <code>m, n</code> の最大公約数を求めるアルゴリズム gcd(m,n) は次のように表せる。
* <pre>
* gcd(m,0) = m
* gcd(m,n) = gcd(n, (mをnで割った余り)) (n != 0)
* </pre>
* @param m 整数1
* @param n 整数2
* @return 引数で与えられた2つの整数の最大公約数
*/
public static int gcd(int m, int n) {
if (n == 0) {
return m;
}
else {
return gcd(n, m % n);
}
}
}
|