实现分数的加减乘除运算
@implementation Fraction
- (void)setNumerator:(NSInteger)numerator{
_numerator = numerator;
}
- (NSInteger)numerator{
return _numerator;
}
- (void)setDenominator:(NSInteger)denominator{
_denominator = denominator;
}
- (NSInteger)denominator{
return _denominator;
}
-(instancetype)initWithNumerator:(NSInteger)numerator denominator:(NSInteger)denominator{
self = [super init];
if (self) {
_numerator = numerator;
_denominator = denominator;
}
return self;
}
+ (Fraction *)NumeratorWithNumerator:(NSInteger)numerator denominator:(NSInteger)denominator{
return [[Fraction alloc] initWithNumerator:numerator denominator:denominator];
}
//一个方法如果不在.h中声明,外部使用对象的时候无法调用,这个方法就只能在这个类的内部使用
//求最大公约数
- (NSInteger)gcdWithNum1:(NSInteger)num1 num2:(NSInteger)num2{
//辗转相除法
while (num2 != 0) {
NSInteger temp = num2;
num2 = num1 % num2;
num1 = temp;
}
return num1;
}
//输出分数
- (void)print{
if (_numerator == _denominator && _numerator != 0 && _denominator != 0) {
NSLog(@"1");
}else if (_numerator == 0 && _denominator != 0){
NSLog(@"0");
}else if (_denominator == 0){
NSLog(@"分母不能为0");
}else if (_denominator < 0){
NSLog(@"%ld %ld", -_numerator, -_denominator);
}else{
NSLog(@"%ld %ld", _numerator, _denominator);
}
}
//约分
- (void)reduce{
//计算最大公约数
NSInteger gcd = [self gcdWithNum1:_numerator num2:_denominator];
_numerator /= gcd;
_denominator /= gcd;
NSLog(@"%ld %ld", _numerator, _denominator);
}
//加法
- (Fraction *)addFraction:(Fraction *)anotherFraction{
//加过之后的分子
NSInteger newNum = self.numerator * anotherFraction.denominator + self.denominator * anotherFraction.numerator;
//加过之后的分母
NSInteger newDenom = self.denominator * anotherFraction.denominator;
Fraction *result = [[Fraction alloc] initWithNumerator:newNum denominator:newDenom];
return result;
}
//减
- (Fraction *)subtractFraction:(Fraction *)anotherFraction{
NSInteger newNum = self.numerator * anotherFraction.denominator - self.denominator * anotherFraction.numerator;
NSInteger newDenom = self.numerator * anotherFraction.denominator;
Fraction *result = [[Fraction alloc] initWithNumerator:newNum denominator:newDenom];
return result;
}
//乘
- (Fraction *)multiplyFraction:(Fraction *)anotherFraction{
NSInteger newNum = self.numerator * anotherFraction.numerator;
NSInteger newDonm = self.denominator * anotherFraction.denominator;
Fraction *result = [[Fraction alloc] initWithNumerator:newNum denominator:newDonm];
return result;
}
//除
- (Fraction *)divideFraction:(Fraction *)anotherFraction{
NSInteger newNum = self.numerator * anotherFraction.denominator;
NSInteger newDonm = self.denominator * anotherFraction.numerator;
Fraction *result = [[Fraction alloc] initWithNumerator:newNum denominator:newDonm];
return result;
}