/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 . Ġxmm mm mo vo Ċ Ġ*/ Ċ package Ġds Ċ Ċ import Ġalgorithms . qg cd Ċ Ċ /** Ċ Ġ* ĠåĪĨ æķ° ç±» Ċ Ġ* Ġ@ author Ġxmm mm mo vo Ċ Ġ* Ġ@ date Ġ 2 0 2 0 / 7 / 2 8 Ġ 1 6 : 4 4 Ċ Ġ* Ġ@ since Ġversion - 1 . 0 Ċ Ġ*/ Ċ class ĠRational Ġconstructor ( ĊĠĠĠ Ġprivate Ġvar Ġnum erator : ĠLong , ĊĠĠĠ Ġprivate Ġvar Ġdenominator : ĠLong Ġ= Ġ 1 L Ċ ) Ġ: ĠComparable < Rational > Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( denom inator Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegal Access Error (" åĪĨ æ¯į ä¸įèĥ½ ä¸º 0 !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsimplify () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnum erator (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnum erator ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdenominator (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdenominator ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĮĸ ç®Ģ ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsimplify () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġg Ġ= Ġq gcd ( num erator , Ġdenominator ) ĊĠĠĠĠĠĠĠ Ġnum erator Ġ/= Ġg ĊĠĠĠĠĠĠĠ Ġdenominator Ġ/= Ġg ĊĠĠĠĠĠĠĠ Ġif Ġ( denom inator Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdenominator Ġ= Ġ- denom inator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnum erator Ġ= Ġ- num erator ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĬł åı· éĩį è½½ ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġpublic Ġoperator Ġfun Ġplus ( other : ĠRational ): ĠRational Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . num erator Ġ== Ġ 0 L ) Ġreturn Ġother ĊĠĠĠĠĠĠĠ Ġif Ġ( other . num erator Ġ== Ġ 0 L ) Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġval Ġg Ġ= Ġq gcd ( this . denom inator , Ġother . denom inator ) ĊĠĠĠĠĠĠĠ Ġreturn ĠRational ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . num erator Ġ* Ġ( other . denom inator Ġ/ Ġg ) Ġ+ Ġother . num erator Ġ* Ġ( this . denom inator Ġ/ Ġg ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . denom inator Ġ* Ġ( other . denom inator Ġ/ Ġg ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĩı åı· éĩį è½½ ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġpublic Ġoperator Ġfun Ġminus ( other : ĠRational ): ĠRational Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . num erator Ġ== Ġ 0 L ) Ġreturn Ġother ĊĠĠĠĠĠĠĠ Ġif Ġ( other . num erator Ġ== Ġ 0 L ) Ġreturn Ġthis ĊĊĠĠĠĠĠĠĠ Ġval Ġg Ġ= Ġq gcd ( this . denom inator , Ġother . denom inator ) ĊĠĠĠĠĠĠĠ Ġreturn ĠRational ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . num erator Ġ* Ġ( other . denom inator Ġ/ Ġg ) Ġ- Ġother . num erator Ġ* Ġ( this . denom inator Ġ/ Ġg ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . denom inator Ġ* Ġ( other . denom inator Ġ/ Ġg ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¹ ĺ åı· éĩį è½½ ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġpublic Ġoperator Ġfun Ġtimes ( other : ĠRational ): ĠRational Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRational ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . num erator Ġ* Ġother . num erator , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . denom inator Ġ* Ġother . denom inator ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĻ¤ åı· éĩį è½½ ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġpublic Ġoperator Ġfun Ġdiv ( other : ĠRational ): ĠRational Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRational ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . num erator Ġ* Ġother . denom inator , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . denom inator Ġ* Ġother . num erator ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ== Ġnull ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( this :: class Ġ!= Ġother :: class ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . compareTo ( other Ġas ĠRational ) Ġ== Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( denom inator Ġ== Ġ 1 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"$ num erator " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ num erator /$ denom inator " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠRational ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ éĻ¤ æ³ķ åĪ¤æĸŃ å¤§å°ı äºİ ĊĠĠĠĠĠĠĠ Ġval Ġnum Ġ= Ġthis . num erator Ġ* Ġother . denom inator ĊĠĠĠĠĠĠĠ Ġval Ġden Ġ= Ġthis . denom inator Ġ* Ġother . num erator ĊĠĠĠĠĠĠĠ Ġif Ġ( num Ġ> Ġden ) ĊĠĠĠĠĠĠĠ Ġ// Ġ è¯´æĺİ åĪĨ åŃĲ å¤§ Ġå½ĵåīį æķ° å¤§ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( num Ġ< Ġden ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} Ċ }