题目描述
设计一个分数类,完成以下功能:1、加减乘除运算;2、返回该分数的值(小数形式);3、求该分数的倒数(分数形式)。
注意: 输入不保证是最简分数,但输出要保证。测试用例保证分子,分母均不为0。
输入
只有一行,为4个用空格分隔的整数,依次代表分数a的分子、分母,分数b的分子、分母。
输出
共8行,依次为a,b,a+b,a-b,a*b,a/b,1/a,a(小数形式,保留1位小数)。具体格式见输出样例,如果结果为整数仍然按分数形式输出,此时分母为1,如果结果为负数,则只能在分子中出现负号。
样例输入
7 8 5 6
样例输出
7/8 5/6 41/24 1/24 35/48 21/20 8/7 0.9
import java.util.Scanner;
class fen{
int up,down;
fen(int u,int p){
up=u;
down=p;
simplification();
eq();
}
public int getup(){
return up;
}
public int getdown(){
return down;
}
//最大公约数
public int Gcd(int u,int d) {
if (u%d==0){
return d;
}
return Gcd(d,u%d);
}
//最简化
void simplification(){
int gcd =Gcd(up, down);
up/=gcd;
down/=gcd;
}
//符号调整
void eq(){
if(down<0) {
down=0-down;
up=0-up;
}
}
//求和
public fen add(fen Fb){
int upp=(up*Fb.getdown())+(Fb.getup()*down);
int doo=down*Fb.getdown();
return new fen(upp, doo);
}
//差
public fen sub(fen Fb){
int upp=(up*Fb.getdown())-(Fb.getup()*down);
int doo=down*Fb.getdown();
return new fen(upp, doo);
}
//积
public fen mul(fen Fb){
int upp=(up*Fb.getup());
int doo=down*Fb.getdown();
return new fen(upp, doo);
}
//商
public fen div(fen Fb){
int upp=(up*Fb.getdown());
int doo=down*Fb.getup();
return new fen(upp, doo);
}
//倒
void reci(){
int upp=down;
int doo=up;
fen aa=new fen(upp, doo);
aa.show();
}
//小数
void tran(){
float itself=(float)up/down;
String itselff = String.format("%.1f",itself);
System.out.println(itselff);
}
void show(){
System.out.println(up+"/"+down);
}
}
public class Main {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int x,y,z,zz;
x=input.nextInt();
y=input.nextInt();
z=input.nextInt();
zz=input.nextInt();
fen a=new fen(x,y);
fen b=new fen(z,zz);
a.show();
b.show();
a.add(b).show();
a.sub(b).show();
a.mul(b).show();
a.div(b).show();
a.reci();
a.tran();
}
}