运算
小数结构体
struct CFractionsNumber {
int molecular;
int denominator;
} ;
基本运算
最大公约数
int __greatestCommonDivisor ( int a, int b) {
int x = 0 ;
if ( a >= b) {
x = b;
} else {
x = a;
} ;
for ( int i = x; i > 0 ; -- i) {
if ( a% i == 0 && b% i == 0 ) {
return i;
}
}
return 1 ;
}
最小公倍数
int __leastCommonMultiple ( int a, int b) {
int max = 0 ;
int min = 0 ;
if ( a <= b) {
if ( b% a == 0 ) {
return b;
}
max = b;
min = a;
} else {
if ( a% b == 0 ) {
return a;
}
max = a;
min = b;
} ;
for ( int i = 1 ; i <= min; ++ i) {
if ( max* i% min == 0 ) {
return max* i;
}
}
}
小数运算
化简
CFractionsNumber Fractions :: reductionFractionsNumbers ( ) {
int commonDivisor = __greatestCommonDivisor ( Number. denominator, Number. molecular) ;
Number. molecular = Number. molecular/ commonDivisor;
Number. denominator = Number. denominator/ commonDivisor;
return Number;
}
加
CFractionsNumber Fractions :: addFractionsNumbers ( CFractionsNumber a, CFractionsNumber b) {
int commonMultiple = __leastCommonMultiple ( a. denominator, b. denominator) ;
Number. denominator = commonMultiple;
Number. molecular = ( a. molecular* ( commonMultiple/ a. denominator) ) + ( b. molecular* ( commonMultiple/ b. denominator) ) ;
this -> reductionFractionsNumbers ( ) ;
return Number;
}
减
CFractionsNumber Fractions :: minusFractionsNumbers ( CFractionsNumber a, CFractionsNumber b) {
int commonMultiple = __leastCommonMultiple ( a. denominator, b. denominator) ;
Number. denominator = commonMultiple;
Number. molecular = ( a. molecular* ( commonMultiple/ a. denominator) ) - ( b. molecular* ( commonMultiple/ b. denominator) ) ;
this -> reductionFractionsNumbers ( ) ;
return Number;
}
乘
CFractionsNumber Fractions :: multiplyFractionsNumbers ( CFractionsNumber a, CFractionsNumber b) {
Number. molecular = a. molecular * b. molecular;
Number. denominator = a. denominator * b. denominator;
this -> reductionFractionsNumbers ( ) ;
return Number;
}
除
CFractionsNumber Fractions :: divideFractionsNumbers ( CFractionsNumber a, CFractionsNumber b) {
Number. molecular = a. molecular * b. denominator;
Number. denominator = a. denominator * b. molecular;
this -> reductionFractionsNumbers ( ) ;
return Number;
}
比较大小
int compareFractionsNumbers ( CFractionsNumber a, CFractionsNumber b) {
int leastCommon = __leastCommonMultiple ( a. denominator, b. denominator) ;
if ( a. molecular* ( leastCommon/ a. denominator) > b. molecular* ( leastCommon/ b. denominator) ) {
return 1 ;
} else if ( a. molecular* ( leastCommon/ a. denominator) == b. molecular* ( leastCommon/ b. denominator) ) {
return 0 ;
} else if ( a. molecular* ( leastCommon/ a. denominator) < b. molecular* ( leastCommon/ b. denominator) ) {
return - 1 ;
}
}