key:
1、运算前,两步得最大公因数,先求最大公因数再约减。
2、运算时,先通分,输出前一次约分
package homework2;
public class Rational {
int fz;
int fm;
Rational(int fz,int fm){
this.fz=fz;
this.fm=fm;
}
//无法直接得到约分后的分子分母->
int getreduction(int a,int b) {//先求最大公因数
int gys=1;
int smaller=a>b?b:a;
for(int i=1;i<=smaller;i++)
{
if(a%i==0&&b%i==0)
{
gys=i;
}
}
return gys;
}
void reduction() {//再约分
int re=getreduction(fz,fm);
fz=fz/re;
fm=fm/re;
}
static Rational add(Rational a,Rational b) {
Rational c =new Rational(a.fz*b.fm+b.fz*a.fm,a.fm*b.fm);//求和或差->先通分,输出前约分
return c;
}
static Rational sub(Rational a,Rational b) {
Rational c =new Rational(a.fz*b.fm-b.fz*a.fm,a.fm*b.fm);
return c;
}
static Rational mul(Rational a,Rational b) {
Rational c =new Rational(a.fz*b.fz,a.fm*b.fm);
return c;
}
static Rational div(Rational a,Rational b) {
Rational c =new Rational(a.fz*b.fm,a.fm*b.fz);//求商->乘倒数
return c;
}
void print() {
reduction();//输出前约分
System.out.println(this.fz+"/"+this.fm);
}
void printReal(){
System.out.println((this.fz+0.0)/(this.fm+0.0));
}
public static void main(String[] args) {
Rational a = new Rational(5,6);
Rational b = new Rational(4,8);
add(a,b).print();
sub(a,b).print();
mul(a,b).print();
div(a,b).print();
a.printReal();
b.printReal();
}
}