Fraction类(分数)实现分数的加减乘除, ⽐比较⼤大⼩小、约分等⽅方法

28 篇文章 0 订阅

Fraction.h:

#import <Foundation/Foundation.h>

@interface Fraction : NSObject

//声明两个实例变量

@property NSInteger upNumber, downNumber;

//自定义初始化方法

- (id)initWithUpNumber:(NSInteger)upNumber downNumber:(NSInteger)downNumber;

//便利构造器

+ (id)fractionWithUpNumber:(NSInteger)upNumber downNumber:(NSInteger)downNumber;


//求最大公约数

- (NSInteger)GCDNumber:(NSInteger)num1 number2:(NSInteger)num2;


//约分

- (void)reduce;


//加法

- (Fraction *)addFraction:(Fraction *)anotherFraction;


//减法

- (Fraction *)delFraction:(Fraction *)anotherFraction;


//乘法

- (Fraction *)mulFraction:(Fraction *)anotherFraction;


//除法

- (Fraction *)divFraction:(Fraction *)anotherFraction;


//比较大小

- (void)comFraction:(Fraction *)num1 ;

--------------------------------------------------------------------------------------------

Fraction.m:

#import "Fraction.h"

@implementation Fraction


- (id)initWithUpNumber:(NSInteger)upNumber downNumber:(NSInteger)downNumber {

    if (self = [super init]) {

        _upNumber = upNumber;

        _downNumber = downNumber;

    }

    return self;

}

+ (id)fractionWithUpNumber:(NSInteger)upNumber downNumber:(NSInteger)downNumber {

    return [[Fraction alloc] initWithUpNumber:upNumber downNumber:downNumber];

}

//重写方法

- (NSString *)description

{

    return [NSString stringWithFormat:@"%ld/%ld", _upNumber, _downNumber];

}


#pragma mark - 运算方法

//求最大公约数

- (NSInteger)GCDNumber:(NSInteger)num1 number2:(NSInteger)num2 {

//利用辗转相除法, 求出最大公约数

        while (num2 != 0) {

        NSInteger temp = num1 % num2;

        num1 = num2;

        num2 = temp;

    }

    return num1;

}


//约分

- (void)reduce {

    NSInteger num = [self GCDNumber:_upNumber number2:_downNumber];

//分子, 分母都以最大公约数, 就是约分后的分子, 分母

    _upNumber /= num;

    _downNumber /= num;

}


//加法

- (Fraction *)addFraction:(Fraction *)anotherFraction {

    Fraction *fraction = [[Fraction alloc] init];

//两分数相加后的分子

    fraction.upNumber = _upNumber * anotherFraction.downNumber + anotherFraction.upNumber * _downNumber;

//相加后的分母

    fraction.downNumber = _downNumber * anotherFraction.downNumber;

    [fraction reduce];

    return fraction;

}


//减法

- (Fraction *)delFraction:(Fraction *)anotherFraction {

    Fraction *fraction = [[Fraction alloc] init];

//两分数相减后的分子

    fraction.upNumber = _upNumber * anotherFraction.downNumber - anotherFraction.upNumber * _downNumber;

//两分数相减后的分母

    fraction.downNumber = _downNumber * anotherFraction.downNumber;

    [fraction reduce];

    return fraction;

}

//乘法


- (Fraction *)mulFraction:(Fraction *)anotherFraction {

    Fraction *fraction = [[Fraction alloc] init];

//两分数相乘后的分子

    fraction.upNumber = _upNumber * anotherFraction.upNumber;

//两分数相乘后的分母

    fraction.downNumber = _downNumber * anotherFraction.downNumber;

    [fraction reduce];

    return fraction;

}


//除法

- (Fraction *)divFraction:(Fraction *)anotherFraction {

    Fraction *fraction = [[Fraction alloc] init];

//两分数相除后的分子

    fraction.upNumber = _upNumber * anotherFraction.downNumber;

//两分数相除后的分母

    fraction.downNumber = _downNumber * anotherFraction.upNumber;

    [fraction reduce];

    return fraction;

}

//比较大小

- (void)comFraction:(Fraction *)num1  {

    Fraction *result = [self delFraction:num1];

//比较两个分数的大小

    if (result == 0) {

        NSLog(@"两数相等!");

    }

    if (result > 0) {

        NSLog(@"%@ > %@", self, num1);

    }else if (result < 0) {

        NSLog(@"%@ < %@", self, num1);

    }

}

@end

---------------------------------------------------------------------------------------------
main:

#import <Foundation/Foundation.h>

#import "Fraction.h"

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        

//        创建⼀一个Fraction(分数)实现分数的加减乘除,⽐比较⼤大⼩小、约分等⽅方法。

//        要求:为类添加属性

        Fraction *num1 = [[Fraction alloc] initWithUpNumber:4 downNumber:12];

        Fraction *num2 = [[Fraction alloc] initWithUpNumber:3 downNumber:12];

        //两分数之和

        Fraction *sum = [num1 addFraction:num2];

        NSLog(@"%@", sum);

        //两数之差

        Fraction *del = [num1 delFraction:num2];

        NSLog(@"%@", del);

        //两数之积

        Fraction *mul = [num1 mulFraction:num2];

        NSLog(@"%@", mul);

        //两数之商

        Fraction *div = [num1 divFraction:num2];

        NSLog(@"%@", div);

        //两数比较大小

        [num1 comFraction:num2];   

    }

    return 0;

}



运行结果:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值