遇到这样一个问题:以分数的形式输出两个数的商,比如7除以10 ,不是输出 0.7 而是输出 7/10 , 6除以9 输出 2/3 。
因为java没有对应的转化函数,所以自己写了一个。我的做法比较简单 ,先用辗转相除法求出两个数的最大公约数,然后进行进行约数处理得到最简结果,再将得到化简的两个数以 “n / m” 的形式输出 。
辗转相除法求最大公约数:比如现在有两个数 n 和 m 求他们的最大公约数 (假设 n > m)。如果 n % m = 0 ,那么说明其最大公约数为 m , 如果 n % m != 0 , 那么 取 n = m , 而 m 为 n 除以 m 的余数,即 m = n%m , 重复上面操作直至得到最大公约数 。
具体代码:
package com.hunter.mianshizhinan;
import java.util.Scanner;
/**
*
* @author luzi
*
*/
public class test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
while(scan.hasNext()){
int n = scan.nextInt();
int m = scan.nextInt();
System.out.println(getDiv(n,m));
}
}
private static String getDiv(int n, int m) {
// TODO Auto-generated method stub
if(m == 0)
return "除数不能为 0 ";
if(n == 0)
return "0";
//进行约数化简
int p = getMax(n,m);
n = n/p;
m = m/p;
return Integer.toString(n) + "/" + Integer.toString(m);
}
//辗转相除法求最大公约数
private static int getMax(int n, int m) {
// TODO Auto-generated method stub
if(n < m){
int tp = n;
n = m;
m = tp;
}
int p = n%m;
while(p != 0){
n = m;
m = p;
p = n%m;
}
return m;
}
}