关于 分数全家福(加减乘除方法)java版含交互对话框

/* (程序头部注释开始) </p><p>* 程序的版权和版本声明部分  
* Copyright (c) 2011, 烟台大学计算机学院学生                               
* 作    者:   李兆庆                          
* 完成日期:   2012      年             9    月         13   日  
* 输入描述:    
* 问题描述及输出:  编写一个Java应用程序,实现功能:分数的四则运算编程 
* 编程思路:分数相加,两个分数分别是1/5和7/20,它们相加后得11/20。方法是先求出两个分数分母的最小公倍数,通分后,再求两个分子的和, 
* 最后约简结果分数的分子和分母(如果两个分数相加的结果是4/8,则必须将其化简成最简分数的形式1/2), 
* 即用分子分母的最大公约数分别除分子和分母。请用四个对话框顺序输入分子和分母,在控制台上输出其运算结果; 
* 知识扩展:先求gcd(最大公约数)再求lcm(最小公倍数)。 最小公倍数等于两数之积除以最大公约数。 
 *例:求12和8的最小公倍数。 
            12和8的最大公约数为4, 
            12×8÷4=24 , 
           所以两数的最小公倍数是24。 
* 程序头部的注释结束 。 
*/  
import javax.swing.JOptionPane; //此函代码必须包含的哦,与用户交互框的生成有关   
  
public class Fraction {  
  
   /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub   
         String str1=JOptionPane.showInputDialog("请输入第一个分数的分子");//用于对话框内的文字输出     
         int a1=Integer.parseInt(str1);   
         String str2=JOptionPane.showInputDialog("请输入第一个分数的分母");//用于对话框内的文字输出     
         int a2=Integer.parseInt(str2);   
         String str3=JOptionPane.showInputDialog("请输入第二个分数的分子");//用于对话框内的文字输出     
         int b1=Integer.parseInt(str3);   
         String str4=JOptionPane.showInputDialog("请输入第二个分数的分母");//用于对话框内的文字输出     
         int b2=Integer.parseInt(str4);   
 
        fracAdd(a1,a2,b1,b2);//结果为:11/20   
        fracSub(a1,a2,b1,b2);//分数相减   
        fracMul(a1,a2,b1,b2);//分数相乘   
        fractDiv(a1,a2,b1,b2);//分数相除   
  
    }  
    //定义分数相加函数
    
   static void fracAdd(int first_numerator,int first_denominator,int second_numrator,int second_denominator){  
        //以下代码能够在控制台上显示结果   
        int lcm,gcd,numera,deomina;  
          
        lcm = lcm(first_denominator,second_denominator);//需要调用求最小公倍数的函数求的最小公倍数   
          
        numera = (lcm/first_denominator)*first_numerator+(lcm/second_denominator)* second_numrator;//  未化简的分子和   
          
        deomina = lcm;             //未化简的分母   
          
        gcd = gcd(numera,deomina); //需要调用求最大公约数的函数   
          
        numera = numera/gcd;       //化简后的分子   
          
        deomina = deomina/gcd;     //化简后的分母   
          
        System.out.println("分数加法运算:"+first_numerator+"/"+first_denominator+"+"+second_numrator+"/"+second_denominator+"="+numera+"/"+deomina);//   
          
    } 
    //定义分数相减函数
    
    static void fracSub(int first_numerator,int first_denominator,int second_numrator,int second_denominator){
    	int lcm,gcd,numera,deomina;  
        
        lcm = lcm(first_denominator,second_denominator);//需要调用求最小公倍数的函数求的最小公倍数   
          
        numera = (lcm/first_denominator)*first_numerator-(lcm/second_denominator)* second_numrator;//  未化简的分子和   
          
        deomina = lcm;             //未化简的分母   
          
        gcd = gcd(numera,deomina); //需要调用求最大公约数的函数   
          
        numera = numera/gcd;       //化简后的分子   
          
        deomina = deomina/gcd;     //化简后的分母   
        System.out.println("分数减法运算:"+first_numerator+"/"+first_denominator+"-"+second_numrator+"/"+second_denominator+"="+numera+"/"+deomina);//   
    }
    //定义分数相乘函数
    
    static void fracMul(int first_numerator,int first_denominator,int second_numrator,int second_denominator){
    	
    	int z, m,gcd,numera,deomina; 
    	
    	z = first_numerator * second_numrator;
    	
    	m = first_denominator * second_denominator;
    	
    	gcd = gcd(z,m);
    	
    	numera = z / gcd;
    	
    	deomina = m / gcd;
    	
    	System.out.println("分数乘法运算:("+first_numerator+"/"+first_denominator+")*("+second_numrator+"/"+second_denominator+")="+numera+"/"+deomina);
    }
    //定义分数相除函数
    
    static void fractDiv(int first_numerator,int first_denominator,int second_numrator,int second_denominator){
    	
    	int z,a, m,gcd,numera,deomina;
    	
    	a = second_denominator;
    	
    	second_denominator = second_numrator;
    	
    	second_numrator = a;
    	
        z = first_numerator * second_numrator;
    	
    	m = first_denominator * second_denominator;
    	
        gcd = gcd(z,m);
    	
    	numera = z / gcd;
    	
    	deomina = m / gcd;
    	
    	
    	System.out.println("分数除法运算:("+first_numerator+"/"+first_denominator+")/("+second_numrator+"/"+second_denominator+")="+numera+"/"+deomina);	
    }
    //求最大公约数   
    static int gcd(int m,int n){  
        int i = 2;       //定义整型变量i,为循环变量   
        int g, min;  
        min = min(m,n);  
        g = 1;           //最大公约数初始值为1   
        while(i <= min)  //判断条件,一直循环到两个数中较小的那个结束   
        {  
            while (m % i == 0 && n % i == 0)  
            {  
                m = m / i;  
                  
                n = n /i;  
                  
                min( m, n );  
                  
                g = g * i;  
            }  
              
            i++;  
        }  
          
        return g;  
          
    }  
   //求最小公倍数函数,其中最小公倍数求法参见程序头部注释“知识扩展”   
    static int lcm(int m,int n){  
        int g, l;  
        g = gcd(m,n);       //调用求最大公约数函数,求得m,n的最大公约数。   
        l = m * n / g;  
        return l;  
    }  
    //求较小值函数   
   static int min(int m,int n){  
       if (m>n){  
            return n;  
        }  
        else{  
            return m;  
        }  
    }        
} 


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值