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

定义⼀个分数类(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)greatestCommonDivisorWithOneNumber:(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

分数的约分及加减乘除运算相关推荐

  1. 【java面对对象】分数类型加减乘除运算的实现

    /**作者:naru* 编写功能:分数类型的加减乘除实现* 本代码并不完美 之后可能会不断完善* 基本思路:利用最小公倍数和最大公约数实现分数的约分* 然后其他均为数学运算* */class Frac ...

  2. 分数加减法混合计算机,新苏教版小学五年级下册数学《5.2 分数加、减法混合运算》教案教学设计...

    分数加.减法混合运算.(教材第81~84页) 1.掌握分数加.减法混合运算的运算顺序及计算方法,正确计算分数加.减法混合运算. 2.培养学生迁移类推的能力及计算能力. 3.培养学生良好的书写.检查习惯 ...

  3. 详解BigDecimal及其加减乘除运算

    目录 一.BigDecimal概述 二.构造函数详解 1.BigDecimal(int val) 2.BigDecimal(int val, MathContext mc) MathContext 3 ...

  4. python混合运算_计算加减乘除混合运算python实现_加减乘除运算题(Python实现)...

    Loading... 加减乘除运算题 ------- 程序输出类似"1+3=","4-1=","2*51=","18/2=&quo ...

  5. java float 加法_JAVA 实现精确的加减乘除运算

    JAVA在加减乘除运算时易发生精度丢失,达不到我们想要的计算结果:为了能够精确表示.计算浮点数,JAVA提供了BigDecimal类,可以以BigDecimal为基础定义一个Arith工具类,代码如下 ...

  6. 简单工厂模式--加减乘除运算

    下面基于简单的<加减乘除运算>实例来讲讲实用简单工厂模式:<备注:以后根据认识的加深,可以添加和修改内容> 需求分析:希望程序提供"加减乘除"四种功能. 功 ...

  7. java用流体加减乘除_任意输入两个数,完成加法、减法、乘法、除法运算!(加减乘除运算分别定义四个方法)_学小易找答案...

    [简答题]编写程序实现菜单设计 [简答题]一层平面图 [简答题]编写一个程序实现大小写字母转换 [简答题]利用循环语句输出一个五行的等腰三角形,如下图 [简答题]编写一个程序实现交换两个变量的数值. ...

  8. matlab 矩阵加减乘除运算

    文章目录 matlab 矩阵加减乘除运算 1 .加.减运算 2. 乘法 3.向量点积 4.向量叉乘 5.混合积 6.矩阵的卷积和多项式乘法 7.反褶积(解卷)和多项式除法运算 8.张量积 9. 除法运 ...

  9. [基础题]2.(*)利用接口做参数,写个计算器,能完成加减乘除运算。

    /*2.(*)利用接口做参数,写个计算器,能完成加减乘除运算. (1)定义一个接口Compute含有一个方法int computer(int n, int m). (2)设计四个类分别实现此接口,完成 ...

最新文章

  1. C++ operator两种用法【转】
  2. PAT甲级1155 Heap Paths (30 分):[C++题解]堆、堆的遍历、树的遍历、dfs输出路径、完全二叉树建树
  3. 信息系统项目管理师-知识、变更、战略管理核心知识点思维脑图
  4. 在NamedParameterJdbcTemplate中使用like查询
  5. 云服务器(uCloud)部署java web项目(二) 安装,配置apache服务器
  6. MVC控制器传递多个实体类集合到视图的方案总结
  7. Android面试题总结加强再加强版(三)
  8. 将Windows文件挂在到Linux上
  9. [2013.8.29]对于多线程编程的几点个人见解
  10. scipy.signal.find_peaks(峰值检测)
  11. 白板推导系列Pytorch-期望最大(EM)算法
  12. 20200705每日一句
  13. A New Romance Is Likely to End up like Your Previous Relationship 为什么每次恋爱总会走向相似的结局?
  14. 各种杀毒软件序列号注册码大全
  15. 中文分词 正向最大匹配法 逆向最大匹配法 双向最大匹配法
  16. android自动播放音乐代码,Android MediaPlayer实现音乐播放器实例代码
  17. mysql中split_part_Postgresql之split_part()切割函数
  18. Windows故障恢复控制台使用方法
  19. Python 100道基础入门练习题(附答案)【这期完结】
  20. 林轩田机器学习基石(Machine Learning Foundations)笔记(一)

热门文章

  1. matlab弹幕抓取,知乎直播弹幕抓取与解析
  2. WiFi PHY信道估计技术:OFDM之理解(一)
  3. 2岁宝宝被玩具意外刺伤眼睛致白内障!呵护孩子成长环境
  4. Linux中ps命令ps -aux 和ps -ef 参数解释
  5. 1.1微处理器与微型计算机的发展概述
  6. GitLab + Jenkins + Docker 实现 CI/CD 集成发布
  7. 回顾知识点:操作系统篇(一)
  8. 好用的iPhone手机第三方便签备忘录记事本
  9. MySql存储过程与调用
  10. 微博抽奖贴为什么到时间了不开奖_微博抽奖|尚未开奖抽奖汇总