请各位帮忙看一下,第一个程序为什么不能输出和第二个程序一样的结果?这两个程序只有求最大公约束的代码不同

来源:互联网 发布:mac命令行移动文件夹 编辑:程序博客网 时间:2024/04/30 07:54

题目:实现分数的加减乘除。

第一个程序疑问疑问疑问

package hu;public class TestFractory { /**  * @param args  */ public static void main(String[] args) {  // TODO Auto-generated method stub  fracAdd(1,5,7,20);//结果为:11/20  fracSub(1,5,7,20);//分数相减  fracMul(1,5,7,20);//分数相乘  fractDiv(1,5,7,20);//分数相除*/ } //加法 static void fracAdd(int first_numerator,int first_denominator,int second_numrator,int second_denominator){  //以下代码能够在控制台上显示结果  //需要调用求最大公约数的函数  //需要调用求最小公倍数的函数  int m=first_denominator*second_denominator;  int n=first_numerator*second_denominator+first_denominator*second_numrator;  lcm(n,m); } //减法 static void fracSub(int first_numerator,int first_denominator,int second_numrator,int second_denominator){  int m=first_denominator*second_denominator;//得到分母  int n=first_numerator*second_denominator-first_denominator*second_numrator;  lcm(n,m); } //乘法 static void fracMul(int first_numerator,int first_denominator,int second_numrator,int second_denominator){    int n=first_denominator*second_denominator;//得到分母  int m=first_numerator*second_numrator;//得到分子  lcm(m,n); } //除法 static void fractDiv(int first_numerator,int first_denominator,int second_numrator,int second_denominator){    int n=first_denominator*second_numrator;//得到分母  int m=first_numerator*second_denominator;  lcm(m,n); } //求最大公约数的函数 static int gcd(int m,int n){        int r = 0;         if(m<n)         {             r=m;             m=n;             n=r;         }         while(r==m%n)         {             if(r==0)                 break;             m=n;             n=r;         }         return n;     }  //化简  static int lcm(int m,int n){  int y=gcd(m,n);         m=m/y;        n=n/y;    System.out.println(m+"/"+n);//<<m<<'/'<<n;     return 0;   }}

输出结果:

1/1
1/-6
1/14
1/1

第二个程序

package hu;public class TestFractory { /**  * @param args  */ public static void main(String[] args) {  // TODO Auto-generated method stub  fracAdd(1,5,7,20);//结果为:11/20  fracSub(1,5,7,20);//分数相减  fracMul(1,5,7,20);//分数相乘  fractDiv(1,5,7,20);//分数相除*/ } //加法 static void fracAdd(int first_numerator,int first_denominator,int second_numrator,int second_denominator){  int m=first_denominator*second_denominator;  int n=first_numerator*second_denominator+first_denominator*second_numrator;  lcm(n,m); } //减法 static void fracSub(int first_numerator,int first_denominator,int second_numrator,int second_denominator){  int m=first_denominator*second_denominator;//得到分母  int n=first_numerator*second_denominator-first_denominator*second_numrator;  lcm(n,m); } //乘法 static void fracMul(int first_numerator,int first_denominator,int second_numrator,int second_denominator){    int n=first_denominator*second_denominator;//得到分母  int m=first_numerator*second_numrator;//得到分子  lcm(m,n); } //除法 static void fractDiv(int first_numerator,int first_denominator,int second_numrator,int second_denominator){    int n=first_denominator*second_numrator;//得到分母  int m=first_numerator*second_denominator;  lcm(m,n); } static int min(int m,int n) { int min=0; if(m<=n) { min=m; } else min=n; return min; } //求最大公约数的函数 static int gcd(int m,int n){   int i=2; int max=1; int min=min(m,n);//求最小值 while(i<=min) { if(m%i==0&&n%i==0) { m=m/i; n=n/i; max=max*i; min(m,n); i=2; continue; } ++i; }  return max;  }  //化简    static int lcm(int m,int n){  int y=gcd(m,n);         m=m/y;        n=n/y;    System.out.println(m+"/"+n);    return 0;   }}


输出结果为:

11/20
-15/100
7/100
4/7