/**作者:naru
* 编写功能:分数类型的加减乘除实现
* 本代码并不完美 之后可能会不断完善
* 基本思路:利用最小公倍数和最大公约数实现分数的约分
* 然后其他均为数学运算
*
*/
class Fraction {
private int denominator;
private int numerator;
Fraction(int numerator,int denominator ) {
this.denominator = denominator;
this.numerator = numerator;
}
Fraction(){
this.denominator=0;
this.numerator=0;
}
public boolean judge() {
if (this.denominator == 0)
return false;
else
return true;
}
public int gcd()// 最大公约数
{
int r;
int tmp;
int a, b;
a = this.numerator;
b = this.denominator;
if (b == 0)
return 0;
else {
if (b < a) {
tmp = b;
b = a;
a = tmp;
}
while (b != 0 && a != 0) {
r = b % a;
b = a;
a = r;
}
return b;
}
}
public int lcm(Fraction G)// 两个分数最小公倍数的求解
{
int Lcm = 0;
int a, b;
a = this.denominator;
b = G.denominator;
if (b == 0)
Lcm = a;
else if (a == 0)
Lcm = b;
else if (a == 0 && b == 0)
return 0;
else
Lcm = a * b;
return Lcm;
}
public String simpFrac() {//约分化简分数 分子为0的直接视为0
if (this.judge()) {
if (this.denominator != 0 && this.numerator != 0) {
return "最简形式为:" + this.numerator / this.gcd() + "/" + this.denominator / this.gcd();
} else if (this.numerator == 0 && this.denominator != 0) {
return "0";
}
}
else
{};
return "分数不存在";
}
public String AddFraction(Fraction G, Fraction S)//分数加法
{
if (this.judge()||G.judge())
{
int Snumerator=0;
int Sdenominator=0;
int Lcm;
Lcm = this.lcm( G);
if ((this.denominator == G.denominator))//分母相同 直接相加
{
Sdenominator = G.denominator;
Snumerator = this.numerator + G.numerator;
}
else if (Lcm == this.denominator || Lcm == G.denominator)//分子分母不相同
//求解F,G两分数的两分母的最小公倍数
//最终加法的得到的分母即为Lcm
//分子为通分后的
{
Sdenominator = Lcm;
if (this.denominator < G.denominator)
Snumerator = (this.denominator * this.numerator) + G.numerator;
if (G.denominator < this.denominator)
Snumerator = (G.numerator * G.denominator) + this.numerator;
}
else
{
Sdenominator = Lcm;
Snumerator = this.numerator * (Lcm / this.denominator) + G.numerator * (Lcm / G.denominator);
}
S.denominator = Sdenominator;
S.numerator = Snumerator;
System.out.print( "分数相加后结果的");
return S.simpFrac();
}
else
{};
return "分数不存在";
}
public String SubFraction( Fraction G, Fraction S)//分数减法
{
if (this.judge()||G.judge())
{
int Snumerator=0;
int Sdenominator=0;
int Lcm;
int a = this.numerator;
int b = this.denominator;
int c = G.numerator;
int d = G.denominator;
Lcm = this.lcm( G);
if ((b == d))
{
Sdenominator = d;
Snumerator = a - c;
}
else if (Lcm == b || Lcm == d)
{
Sdenominator = Lcm;
if (b < d)
Snumerator = (a * b) - c;
if (d < b)
Snumerator = (c * d) - a;
}
else
{
Sdenominator = Lcm;
Snumerator = a * (Lcm / b) - c * (Lcm / d);
}
S.denominator = Sdenominator;
S.numerator = Snumerator;
System.out.print( "分数相减后结果的");
return S.simpFrac();
}
else
{};
return "分数不存在";
}
public String MulFraction(Fraction G, Fraction S)//分数乘法
{
if (this.judge()||G.judge())
{
int a = this.numerator;
int b = this.denominator;
int c = G.numerator;
int d = G.denominator;
int Snumerator=0;
int Sdenominator=0;
Sdenominator = b * d;
Snumerator = a * c;
S.denominator = Sdenominator;
S.numerator = Snumerator;
if (Sdenominator == 0)
return "分数不存在";
else if (Snumerator == 0)
return "分数相乘结果为0";
else
{
System.out.print( "相乘结果的");
return S.simpFrac();
}
}
else
{};
return "分数不存在";
}
public String DivFraction( Fraction G, Fraction S)//分数除法
{
if (this.judge()||G.judge())
{
int a = this.numerator;
int b = this.denominator;
int c = G.numerator;
int d = G.denominator;
int Snumerator;
int Sdenominator;
Sdenominator = b * c;
Snumerator = a * d;
S.denominator = Sdenominator;
S.numerator = Snumerator;
if (Sdenominator == 0)
return "分数不存在" ;
else if (Snumerator == 0)
return "分数为0" ;
else
{
System.out.print( "分数相除结果的");
return S.simpFrac();
}
}
else
{};
return "分数不存在";
}
}
public class Frac_{
public static void show() {
Fraction F=new Fraction(1,0);
Fraction G=new Fraction(2,7);
Fraction S=new Fraction();
System.out.println(F.simpFrac());
System.out.println(G.simpFrac());
System.out.println(F.AddFraction( G, S));
System.out.println(F.SubFraction( G, S));
System.out.println(F.DivFraction( G, S));
System.out.println(F.MulFraction( G, S));
Fraction A=new Fraction(0,0);
Fraction B=new Fraction(0,0);
Fraction C=new Fraction();
System.out.println(A.simpFrac());
System.out.println(B.simpFrac());
System.out.println(A.AddFraction( B, C));
System.out.println(A.SubFraction( B, C));
System.out.println(A.DivFraction( B, C));
System.out.println(A.MulFraction( B, C));
Fraction D=new Fraction(0,22);
Fraction E=new Fraction(78,45);
Fraction H=new Fraction();
System.out.println(D.simpFrac());
System.out.println(E.simpFrac());
System.out.println(D.AddFraction( E, H));
System.out.println(D.SubFraction( E, H));
System.out.println(D.DivFraction( E, H));
System.out.println(D.MulFraction( E, H));
Fraction L=new Fraction(114,114514);
Fraction M=new Fraction(514,114514);
Fraction N=new Fraction();
System.out.println(L.simpFrac());
System.out.println(M.simpFrac());
System.out.println(L.AddFraction( M, N));
System.out.println(L.SubFraction( M, N));
System.out.println(L.DivFraction( M, N));
System.out.println(L.MulFraction( M, N));
Fraction O=new Fraction(615,1722);
Fraction P=new Fraction(1107,1923);
Fraction Q=new Fraction();
System.out.println(O.simpFrac());
System.out.println(P.simpFrac());
System.out.println(O.AddFraction( P, Q));
System.out.println(O.SubFraction( P, Q));
System.out.println(O.DivFraction( P, Q));
System.out.println(O.MulFraction( P, Q));
}
public static void main(String[] args){
show();
}
}
/*
测试结果:
分数不存在
最简形式为:2/7
分数相加后结果的最简形式为:2/7
分数相减后结果的最简形式为:-2/7
分数不存在
分数不存在
分数不存在
分数不存在
分数不存在
分数不存在
分数不存在
分数不存在
0
最简形式为:26/15
分数相加后结果的最简形式为:26/15
分数相减后结果的最简形式为:-26/15
分数为0
分数相乘结果为0
最简形式为:57/57257
最简形式为:257/57257
分数相加后结果的最简形式为:314/57257
分数相减后结果的最简形式为:200/-57257
分数相除结果的最简形式为:57/257
相乘结果的最简形式为:14649/57138577
最简形式为:5/14
最简形式为:369/641
分数相加后结果的最简形式为:8371/8974
分数相减后结果的最简形式为:1961/-8974
分数相除结果的最简形式为:3205/5166
相乘结果的最简形式为:1845/8974
*/
【java面对对象】分数类型加减乘除运算的实现
最新推荐文章于 2021-10-17 22:46:39 发布