Fraction的一年四季变化之——加法 (含与用户交互框版)
Fraction的四季变化之——加法 (含与用户交互框版)

/* (程序头部注释开始) </p><p>* 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * 作 者: 李兆庆 * 完成日期: 2012 年 9 月 9 日 * 输入描述: * 问题描述及输出: 编写一个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 ft { /** * @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(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 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 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; } } }