C++ 关于分数的处理与计算
1.分数的表示:结构体
struct Fraction{int up;//分子int down;//分母Fraction(){};Fraction(int _up,int _down){this->up = _up;this->down = _down;}
};
其中规定如下:
(1)如果此分数是个分数则将符号放在分子上。
(2)如果此分数是0则将分子赋值为0,分母赋值为1。(至于分母赋值为1的原因是:当此分数输出时与分数为整数的情况一同处理输出,即若分数的分母为1则只输出分子。)
(3)分子分母必须最简
2.分数的化简
Fraction reduction(Fraction result)
{if(result.down < 0){result.up *= (-1);result.down *= (-1);}if(result.up == 0)result.down = 1;int _gcd = gcd(abs(result.up),abs(result.down));result.up = result.up/_gcd;result.down = result.down/_gcd;return result;
}
其中gcd函数用于求两个数的最大公因数,如下:
int gcd(int a,int b)
{if(b == 0)return a;else{return gcd(b,a%b);}
}
通过分数的化简此分数就满足上面写的分数的3条约定。
3.分数的计算:加减乘除
void add(Fraction f1 , Fraction f2)
{f3.up = f1.up*f2.down + f2.up*f1.down;f3.down = f1.down*f2.down;f3 = reduction(f3);
}
void sub(Fraction f1 , Fraction f2)
{f3.up = f1.up*f2.down - f2.up*f1.down;f3.down = f1.down*f2.down;f3 = reduction(f3);
}
void multiply(Fraction f1 , Fraction f2)
{f3.up = f1.up*f2.up;f3.down = f1.down*f2.down;f3 = reduction(f3);
}
void divide(Fraction f1 , Fraction f2)
{if(f2.up == 0)return;f3.up = f1.up*f2.down;f3.down = f1.down*f2.up;f3 = reduction(f3);
}
其中的f3时全局分数变量。
4.分数的输出:
void my_printf(Fraction f1)
{if(f1.up < 0)cout<<"(";int abs_f1 = abs(f1.up);if(f1.down == 1)cout<<f1.up;else if(abs_f1 > f1.down){cout<<f1.up/f1.down<<" "<<abs_f1%f1.down<<"/"<<f1.down;}else{cout<<f1.up<<"/"<<f1.down;}if(f1.up < 0)cout<<")";
}
输出的原则是:
(1)若此分数是个负数则加括号;
(2)若分母是1则输出分子当作整数输出;
(3)若分子(绝对值)大于分母则输出带分数,其中带分数的整数部分f1.up/f1.down,分子部分abs(f1.up)/f1.down,分母部分不变。
(4)若(2)(3)都不满足则直接输出。
C++ 关于分数的处理与计算相关推荐
- python输出假分数_分数的表示以及计算(c++)
之前一直总是简单的想将分数化为小数进行计算,其实使用相应的结构进行分子分母的分开保存,可以有奇效: 分数的存储: struct Fraction{ int up; int down; }; 其中up代 ...
- 分数的表示以及计算(c++)
之前一直总是简单的想将分数化为小数进行计算,其实使用相应的结构进行分子分母的分开保存,可以有奇效: 分数的存储: struct Fraction{int up;int down; }; 其中up代表分 ...
- 正负分数计算机在线算使用,分数的表示以及计算(c++)
之前一直总是简单的想将分数化为小数进行计算,其实使用相应的结构进行分子分母的分开保存,可以有奇效: 分数的存储: struct Fraction{ int up; int down; }; 其中up代 ...
- ElasticSearch 的分数 (_score) 是怎么计算得出 (2.X 5.X)
原文地址 上次写了关于 Elasticsearch 如何分词索引, 接着继续写 Elasticsearch 怎么计算搜索结果的得分(_score). Elasticsearch 默认是按照文档与查询的 ...
- elasticsearch搜索分数自定义以及相关度计算相关
elasticsearch搜索分数自定义以及相关度计算相关 es通过其score字段对搜索结果进行排序 在进行业务开发时通常其默认的分数计算是不符合预期的. 最简单的方法是通过boost字段来对每一个 ...
- HDU2156 分数矩阵【数学计算+水题】
分数矩阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 【Android 属性动画】属性动画 Property Animation 工作原理 ( 线性插值动画 | 非线性插值动画 | 动画计算 | 经过分数 | 插值分数 | 类型估值器)
文章目录 一.线性插值动画示例 二.非线性插值动画示例 三.动画计算方式 四.时间经过分数 ( Elapsed Fraction ) 五.插值分数 ( Interpolated Fraction ) ...
- 标准评分卡分数计算原理_评分卡模型监控(前端分析)
1.评分卡模型监控主要可以分为前端分析(Front-End)和后端分析(Back-End) 2.前端分析关注样本人群的稳定性,指标主要有PSI和CSI 3.PSI用来衡量分数在开发样本和近期样本上的分 ...
- 分数混合运算简便方法_分数混合运算和简便计算
学习目标知识与技能懂得分数混合运算的顺序和整数混合运算的顺序相同,能熟练进行有关分数混合运算的计算. 过程与方法 知道整数乘法的运算定律对于分数乘法同样适用,并能够运用所学运算定律进行一些简便运算. ...
最新文章
- JavaScript中变量的相互引用
- bootstrap的两种在input框后面增加一个图标的方式
- 使用gdb和core dump迅速定位段错误
- vscode web版搭建_VS Code 1.40 发布!可自行搭建 Web 版 VS Code!
- extmail mysql数据库 重启_配置extmail过程详解 | 学步园
- CDP营销方案 不仅仅是数据整合
- ddos应急处理_DDoS攻击应急体系知多少?
- 【阿里云IoT+YF3300】10.快速开发188协议设备驱动
- Mac运行ftp报错Error: JAVA_HOME is not defined correctly.
- maptalks+three.js+vue webpack项目实现二维地图上贴三维模型
- dms mysql定义变量_数据管理DMS:自建MySQL数据库 全量SQL诊断功能发布啦!-阿里云开发者社区...
- 深入理解Nginx:高顿教育java开发
- 【大话数据结构C语言】56 二叉排序树的查找、插入和删除
- 九宫格图片怎么操作?这里有你想要的方法
- .pcd文件转换为.ply文件
- 安全漏洞中的倚天剑——XSS跨站脚本攻击
- JavaScriptCore内部原理(一):从JS源码到字节码的追踪
- 汽车芯片的可靠性为其他行业打开了大门
- MySQL中常用的SQL优化方法
- 猫眼电影Top100爬取数据(期末项目)