OC分数作业
分数计算:任意的两个分数,对这两个分数的进行加、减、乘、除运算,并输出结果, 注:结果区分正负。
main.m
#import "Fraction.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
//第一个分数
Fraction * f1 = [[Fraction alloc] init];
f1.numerator = 3;
f1.denominator = 4;
//第二个分数
Fraction * f2 = [[Fraction alloc] init];
f2.numerator = -5;
f2.denominator = 4;
//加法
Fraction * addResult = [f1 addFraction:f2];
[addResult print];
//减法
Fraction * subtractResult = [f1 subtractFraction:f2];
[subtractResult print];
//乘法
Fraction * multiplyResult = [f1 multiplyFraction:f2];
[multiplyResult print];
//除法
Fraction * devideResult = [f1 devideFraction:f2];
[devideResult print];
}
return 0;
}
Fraction.h
@interface Fraction : NSObject
{
BOOL _isNegative; //标记是否是负数
}
@property(nonatomic,assign) int denominator;//分子
@property(nonatomic,assign) int numerator;//分母
/**
* 加法
*
* @param anotherFraction 加法的第二个分数
*
* @return 返回相加后的结果
*/
- (Fraction *)addFraction:(Fraction *)anotherFraction;
/**
* 减法
*
* @param anotherFraction 减法的第二个分数
*
* @return 返回相减后的结果
*/
- (Fraction *)subtractFraction:(Fraction *)anotherFraction;
/**
* 乘法
*
* @param anotherFraction 乘法的第二个分数
*
* @return 返回相乘后的结果
*/
- (Fraction *)multiplyFraction:(Fraction *)anotherFraction;
/**
* 除法
*
* @param anotherFraction 除法的第二个分数
*
* @return 返回相除后的结果
*/
- (Fraction *)devideFraction:(Fraction *)anotherFraction;
/**
* 输出结果
*/
- (void)print;
@end
Fraction.m
@implementation Fraction
@synthesize denominator = _denominator,numerator = _numerator;
/**
* 加法
*
* @param anotherFraction 加法的第二个分数
*
* @return 返回相加后的结果
*/
- (Fraction *)addFraction:(Fraction *)anotherFraction
{
int anotherNumerator = anotherFraction.numerator;//分子
int anotherDenominator = anotherFraction.denominator;//分母
int resultNumerator = _numerator * anotherDenominator + _denominator * anotherNumerator;
int resultDenominator = _denominator * anotherDenominator;
Fraction * newFraction = [[Fraction alloc] init];
newFraction.numerator = resultNumerator;
newFraction.denominator = resultDenominator;
return newFraction;
}
/**
* 减法
*
* @param anotherFraction 减法的第二个分数
*
* @return 返回相减后的结果
*/
- (Fraction *)subtractFraction:(Fraction *)anotherFraction
{
int anotherNumerator = anotherFraction.numerator;
int anotherDenominator = anotherFraction.denominator;
int resultNumerator = _numerator * anotherDenominator - _denominator * anotherNumerator;
int resultDenominator = _denominator * anotherDenominator;
Fraction * newFraction = [[Fraction alloc] init];
newFraction.numerator = resultNumerator;
newFraction.denominator = resultDenominator;
return newFraction;
}
/**
* 乘法
*
* @param anotherFraction 乘法的第二个分数
*
* @return 返回相乘后的结果
*/
- (Fraction *)multiplyFraction:(Fraction *)anotherFraction
{
int anotherNumerator = anotherFraction -> _numerator;
int anotherDenominator = anotherFraction -> _denominator;
int resultNumerator = _numerator * anotherNumerator;
int resultDenominator = _denominator * anotherDenominator;
Fraction * newFraction = [[Fraction alloc] init];
newFraction.numerator = resultNumerator;
newFraction.denominator = resultDenominator;
return newFraction;
}
/**
* 除法
*
* @param anotherFraction 除法的第二个分数
*
* @return 返回相除后的结果
*/
- (Fraction *)devideFraction:(Fraction *)anotherFraction
{
int anotherNumerator = anotherFraction.numerator;
int anotherDenominator = anotherFraction.denominator;
if (anotherNumerator == 0) {
NSLog(@"分母不能为0");
return nil;
}
int resultNumerator = _numerator * anotherDenominator;
int resultDenominator = _denominator * anotherNumerator;
Fraction * newFraction = [[Fraction alloc] init];
newFraction.numerator = resultNumerator;
newFraction.denominator = resultDenominator;
return newFraction;
}
/**
* 输出结果
*/
- (void)print
{
[self reduce]; //约分
NSString * minusString = [self isNegative] ? @"-" : @""; //判断正负
//如果分子能够被分母整除,输出结果为最终结果的整数。
if (_numerator%_denominator == 0) {
NSLog(@"%@%d",minusString,abs(_numerator)/abs(_denominator));
}else{
NSLog(@"%@%d/%d",minusString,abs(_numerator),abs(_denominator));
}
}
/**
* 约分
*/
- (void)reduce
{
int u = _numerator;//分母
int v = _denominator;//分子
int temp;
while (v != 0) {
temp = u % v;
u = v;
v = temp;
// NSLog(@"u = %d,v = %d",u,v);
}
_numerator /= u;
_denominator /= u;
}
/**
* 判断是否是负数
*/
- (BOOL)isNegative
{
_isNegative = (_numerator * _denominator < 0) ? YES : NO;
return _isNegative;
}
@end