分数的约分及加减乘除运算
分数的约分及加减乘除运算
实例变量:分子,分母
⽅法:初始化⽅方法(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
分数的约分及加减乘除运算相关推荐
- 【java面对对象】分数类型加减乘除运算的实现
/**作者:naru* 编写功能:分数类型的加减乘除实现* 本代码并不完美 之后可能会不断完善* 基本思路:利用最小公倍数和最大公约数实现分数的约分* 然后其他均为数学运算* */class Frac ...
- 分数加减法混合计算机,新苏教版小学五年级下册数学《5.2 分数加、减法混合运算》教案教学设计...
分数加.减法混合运算.(教材第81~84页) 1.掌握分数加.减法混合运算的运算顺序及计算方法,正确计算分数加.减法混合运算. 2.培养学生迁移类推的能力及计算能力. 3.培养学生良好的书写.检查习惯 ...
- 详解BigDecimal及其加减乘除运算
目录 一.BigDecimal概述 二.构造函数详解 1.BigDecimal(int val) 2.BigDecimal(int val, MathContext mc) MathContext 3 ...
- python混合运算_计算加减乘除混合运算python实现_加减乘除运算题(Python实现)...
Loading... 加减乘除运算题 ------- 程序输出类似"1+3=","4-1=","2*51=","18/2=&quo ...
- java float 加法_JAVA 实现精确的加减乘除运算
JAVA在加减乘除运算时易发生精度丢失,达不到我们想要的计算结果:为了能够精确表示.计算浮点数,JAVA提供了BigDecimal类,可以以BigDecimal为基础定义一个Arith工具类,代码如下 ...
- 简单工厂模式--加减乘除运算
下面基于简单的<加减乘除运算>实例来讲讲实用简单工厂模式:<备注:以后根据认识的加深,可以添加和修改内容> 需求分析:希望程序提供"加减乘除"四种功能. 功 ...
- java用流体加减乘除_任意输入两个数,完成加法、减法、乘法、除法运算!(加减乘除运算分别定义四个方法)_学小易找答案...
[简答题]编写程序实现菜单设计 [简答题]一层平面图 [简答题]编写一个程序实现大小写字母转换 [简答题]利用循环语句输出一个五行的等腰三角形,如下图 [简答题]编写一个程序实现交换两个变量的数值. ...
- matlab 矩阵加减乘除运算
文章目录 matlab 矩阵加减乘除运算 1 .加.减运算 2. 乘法 3.向量点积 4.向量叉乘 5.混合积 6.矩阵的卷积和多项式乘法 7.反褶积(解卷)和多项式除法运算 8.张量积 9. 除法运 ...
- [基础题]2.(*)利用接口做参数,写个计算器,能完成加减乘除运算。
/*2.(*)利用接口做参数,写个计算器,能完成加减乘除运算. (1)定义一个接口Compute含有一个方法int computer(int n, int m). (2)设计四个类分别实现此接口,完成 ...
最新文章
- C++ operator两种用法【转】
- PAT甲级1155 Heap Paths (30 分):[C++题解]堆、堆的遍历、树的遍历、dfs输出路径、完全二叉树建树
- 信息系统项目管理师-知识、变更、战略管理核心知识点思维脑图
- 在NamedParameterJdbcTemplate中使用like查询
- 云服务器(uCloud)部署java web项目(二) 安装,配置apache服务器
- MVC控制器传递多个实体类集合到视图的方案总结
- Android面试题总结加强再加强版(三)
- 将Windows文件挂在到Linux上
- [2013.8.29]对于多线程编程的几点个人见解
- scipy.signal.find_peaks(峰值检测)
- 白板推导系列Pytorch-期望最大(EM)算法
- 20200705每日一句
- A New Romance Is Likely to End up like Your Previous Relationship 为什么每次恋爱总会走向相似的结局?
- 各种杀毒软件序列号注册码大全
- 中文分词 正向最大匹配法 逆向最大匹配法 双向最大匹配法
- android自动播放音乐代码,Android MediaPlayer实现音乐播放器实例代码
- mysql中split_part_Postgresql之split_part()切割函数
- Windows故障恢复控制台使用方法
- Python 100道基础入门练习题(附答案)【这期完结】
- 林轩田机器学习基石(Machine Learning Foundations)笔记(一)