分数的约分及加减乘除运算

分数的约分及加减乘除运算

 
定义⼀个分数类(Fraction)
实例变量:分子,分母
⽅法:初始化⽅方法(2个参数),便利构造器,约分,打印,加,减,乘,除。

main.m

#import
#import "Fraction.h"
int main(int argc, const char * argv[]) {
       Fraction *num1 = [Fraction fractionWithNumerator:2 denominator:8];
       [num1 print];
       [num1 reductionOfFraction];
       [num1 print];
       Fraction *num2 = [Fraction fractionWithNumerator:6 denominator:15];
       [num2 print];
       [num2 reductionOfFraction];
       [num2 print];
       Fraction *result = [Fraction minusWitfAFraction:num1 bFraction:num2];
       [result print];
       Fraction *result2 = [Fraction addWitfAFraction:num1 bFraction:num2];
       [result2 print];
       Fraction *result3 = [Fraction timeWitfAFraction:num1 bFraction:num2];
       [result3 print];
       Fraction *result4 = [Fraction divideWitfAFraction:num1 bFraction:num2];
       [result4 print]; 
       return 0;
}

Fraction.h

#import

@interface Fraction : NSObject
{
       NSInteger numerator;//分子
       NSInteger denominator;//分母
}
//自定义初始化方法
- (id)initWithNumerator:(NSInteger)aNumerator;
- (id)initWithNumerator:(NSInteger)aNumerator denominator:(NSInteger)aDenominator;
//便利构造器
+ (Fraction *)fractionWithNumerator:(NSInteger)aNumerator denominator:(NSInteger)aDenominator;

//setter和getter
- (void)setNumerator:(NSInteger)aNumerator;
- (NSInteger)numerator;
- (void)setDenominator:(NSInteger)aDenominator;
- (NSInteger)denominator;

//最大公约数:辗转相除法
- (NSInteger)greatestCommonDivisorWit hOneNumber:(NSInteger)oneNumber anotherNumber:(NSInteger)anotherNumber;
//约分
- (void)reductionOfFraction;
//打印
- (void)print;
//加
+ (Fraction *)addWitfAFraction:(Fraction *)aFraction bFraction:(Fraction *)bFraction;
//减
+ (Fraction *)minusWitfAFraction:(Fraction *)aFraction bFraction:(Fraction *)bFraction;
//乘
+ (Fraction *)timeWitfAFraction:(Fraction *)aFraction bFraction:(Fraction *)bFraction;
//除
+ (Fraction *)divideWitfAFraction:(Fraction *)aFraction bFraction:(Fraction *)bFraction;
@end

Fraction.m

#import "Fraction.h"

@implementation Fraction
- (id)init {
    if (self = [super init]) {
        numerator = 5;
        denominator = 9;
    }
    return self;
}

- (id)initWithNumerator:(NSInteger)aNumerator {
    self = [self init];
    numerator = aNumerator;
    return self;
}
- (id)initWithNumerator:(NSInteger)aNumerator denominator:(NSInteger)aDenominator {
    self = [self initWithNumerator:aNumerator];
    denominator = aDenominator;
    return self;
}

+ (Fraction *)fractionWithNumerator:(NSInteger)aNumerator denominator:(NSInteger)aDenominator {
    return [[Fraction alloc] initWithNumerator:aNumerator denominator:aDenominator];
}

- (void)setNumerator:(NSInteger)aNumerator {
    numerator = aNumerator;
}
- (NSInteger)numerator {
    return numerator;
}
- (void)setDenominator:(NSInteger)aDenominator {
    denominator = aDenominator;
}
- (NSInteger)denominator {
    return denominator;
}
//最大公约数:辗转相除法
- (NSInteger)greatestCommonDivisorWithOneNumber:(NSInteger)oneNumber anotherNumber:(NSInteger)anotherNumber {
    while (anotherNumber != 0) {
        NSInteger temp = oneNumber % anotherNumber;
        oneNumber = anotherNumber;
        anotherNumber = temp;
    }
    return oneNumber;
}

//约分
- (void)reductionOfFraction {
    NSInteger temp = [self greatestCommonDivisorWithOneNumber:numerator anotherNumber:denominator];
    numerator /= temp;
    denominator /= temp;
}

//打印
- (void)print {
    NSLog(@"这个分数是%ld / %ld", numerator, denominator);
}

//加
+ (Fraction *)addWitfAFraction:(Fraction *)aFraction bFraction:(Fraction *)bFraction {
    Fraction *result = [[Fraction alloc] init];
    result.denominator = aFraction.denominator * bFraction.denominator;
    result.numerator = aFraction.numerator * bFraction.denominator + bFraction.numerator * aFraction.denominator;
    [result reductionOfFraction];
    return result;
}
//减
+ (Fraction *)minusWitfAFraction:(Fraction *)aFraction bFraction:(Fraction *)bFraction {
    //存储结构
    Fraction *result = [[Fraction alloc] init];
    //分母
    result.denominator = aFraction.denominator * bFraction.denominator;
    //分子
    result.numerator = aFraction.numerator * bFraction.denominator - bFraction.numerator * aFraction.denominator;
    //约分
    [result reductionOfFraction];
    return result;
}

//乘
+ (Fraction *)timeWitfAFraction:(Fraction *)aFraction bFraction:(Fraction *)bFraction {
    Fraction *result = [[Fraction alloc] init];
    result.denominator = aFraction.denominator * bFraction.denominator;
    result.numerator = aFraction.numerator * bFraction.numerator;
    [result reductionOfFraction];
    return result;
}
//除
+ (Fraction *)divideWitfAFraction:(Fraction *)aFraction bFraction:(Fraction *)bFraction {
    Fraction *result = [[Fraction alloc] init];
    result.denominator = aFraction.denominator * bFraction.numerator;
    result.numerator = aFraction.numerator * bFraction.denominator;
    [result reductionOfFraction];
    return result;
}
@end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值