约分化简中要求最大公约数,这里使用辗转相处法,求解两个数的最大公约数。

其他接口都是根据分数的特性进行对应处理即可。

分数的格式化输出接口中,对分数进行分母合法性判断,分子为零判断,以及约分后,是否为假分数的判断,从而对应不同的输出格式,具体情况下,可任意调节对应输出方式。

分数的分子和分母为int型,具体应用中,可根据实际情况调整对应的数据类型,进行扩展。

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;// 最大公约数:辗转相处法
int gcd(int a, int b)
{return b == 0 ? a : gcd(b, a % b);
}// 最小公倍数:两数乘积除以最大公约数
int lcm(int a, int b)
{return a / gcd(a, b) * b;
}struct Fraction
{int up;        // 分子int down;  // 分母Fraction(int v1, int v2) :up(v1), down(v2){}
};// 分数的化简
Fraction FractionReduction(Fraction& val)
{// 分子为0,则分母为1if (val.up == 0) val.down = 1;// 如果分母为负数,则分子分母变号if (val.down < 0){val.up = -val.up;val.down = -val.down;}// 约分: 分子分母同时除以最大公约数int x = gcd(abs(val.up), abs(val.down));val.up /= x;val.down /= x;return val;
}// 分数加法
Fraction FractionAddition(Fraction v1, Fraction v2)
{Fraction res(0, 1);// 对分母进行检测if (v1.down == 0 || v2.down == 0) return res;// 分子,分母分别计算res.up = v1.up * v2.down + v1.down * v2.up;res.down = v1.down * v2.down;// 化简,返回return FractionReduction(res);
}// 分数减法
Fraction FractionSubtraction(Fraction v1, Fraction v2)
{Fraction res(0, 1);// 对分母进行检测if (v1.down == 0 || v2.down == 0) return res;// 分子,分母分别计算res.up = v1.up * v2.down - v1.down * v2.up;res.down = v1.down * v2.down;// 化简,返回return FractionReduction(res);
}// 分数乘法
Fraction FractionMultiplication(Fraction v1, Fraction v2)
{Fraction res(0, 1);// 对分母进行检测if (v1.down == 0 || v2.down == 0) return res;// 分子,分母分别相乘res.up = v1.up * v2.up;res.down = v1.down * v2.down;// 化简,返回return FractionReduction(res);
}// 分数除法
Fraction FractionDivision(Fraction v1, Fraction v2)
{Fraction res(0, 1);// 对分母进行检测if (v1.down == 0 || v2.down == 0) return res;// 分子,分母分别计算res.up = v1.up * v2.down;res.down = v1.down * v2.up;// 化简,返回return FractionReduction(res);
}void PrintFraction(Fraction val)
{if (val.down == 0){printf("invalid value.\n");return;}else if (val.up == 0){printf("0/1\n");return;}FractionReduction(val);if (val.up > val.down)printf("%d %d/%d\n", val.up / val.down, val.up % val.down, val.down);elseprintf("%d/%d\n", val.up, val.down);return;
}int main()
{Fraction v1(2, 3);Fraction v2(4, 5);Fraction res(0, 1);res = FractionAddition(v1, v2);cout << "addtion: ";PrintFraction(res);res = FractionSubtraction(v1, v2);cout << "subtraction: ";PrintFraction(res);res = FractionMultiplication(v1, v2);cout << "multiplication: ";PrintFraction(res);res = FractionDivision(v1, v2);cout << "division: ";PrintFraction(res);// 100/0res.up = 100;res.down = 0;PrintFraction(res);// 0/100res.up = 0;res.down = 100;PrintFraction(res);return 0;
}

谢谢阅读

C++:分数处理(约分、加减乘除、假分数输出)相关推荐

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

    分数的约分及加减乘除运算 定义⼀个分数类(Fraction) 实例变量:分子,分母 ⽅法:初始化⽅方法(2个参数),便利构造器,约分,打印,加,减,乘,除. main.m #import #impor ...

  2. python输入一个分数、约分后输出_Python中分数的相关使用教程

    你可能不需要经常处理分数,但当你需要时,Python的Fraction类会给你很大的帮助.在该指南中,我将提供一些有趣的实例,用于展示如何处理分数,突出显示一些很酷的功能. 1 基础 Fraction ...

  3. c语言输入的成绩由高到低该怎么,c语言编程:输入学生信息(姓名年龄分数)并按照分数由高到低输出...

    <c语言编程:输入学生信息(姓名年龄分数)并按照分数由高到低输出>由会员分享,可在线阅读,更多相关<c语言编程:输入学生信息(姓名年龄分数)并按照分数由高到低输出(2页珍藏版)> ...

  4. 分数怎么约分成最简分数?其实很简单

    在数学中,我们经常需要对分数进行简化,以便更方便地进行计算和理解.这个过程被称为分数的约分.下面将向您介绍如何约分分数.约分是一种常见的数学概念,它可以帮助我们更好地理解分数,从而更好地理解其他数学概 ...

  5. 【C++PTA】7-1 运算符重载 分数类 约分

    请定义一个分数类,拥有两个整数的私有数据成员,分别表示分子和分母(分母永远为正数,符号通过分子表示). 重载运算符加号"+",实现两个分数的相加,所得结果必须是最简分数. 输入: ...

  6. python输出分数_如何用python3输出分数?

    上学的时候,数学是一批小伙伴们的噩梦,相比较语文的死记硬背方面,真的是读题一分钟,解题一小时.小编当年也被数学困住了,当然现在肯定是要改变这种情况.学习了python后,小编就找到了很多能够解决数学方 ...

  7. java 约分_java如何将分数快速约分

    根据题意可得如下代码: public class Fraction { private int numerator; private int denominator; public Fraction( ...

  8. 算法笔记随笔:分数的化简,四则运算和输出

    #include <stdio.h> #include <math.h> struct Fraction{int up,down; }; int gcd(int a,int b ...

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

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

最新文章

  1. 联想服务器x3650硬盘黄灯,服务器故障处理 X3650M4主板故障 硬盘黄灯 内存错误 联想(IBM)服务器配件...
  2. asp.net 在 Ngnix 服务器 中配置攻略
  3. 基于时序数据的微内核预警引擎架构设计
  4. shell按行读取文件的常见几种方法
  5. 【C语言数据结构】单链表
  6. wxWidgets:存档格式
  7. [蛋蛋の插画]小笔“最高”>、<
  8. NoNode for /hbase/hbaseid解决方案
  9. oracle 9i乱码,oracle 9i sql*plus worksheet乱码问题
  10. UILabel自适应高度和自动换行
  11. 转载: .net程序员偏向XML开发的面试题
  12. linux内核驱动ldd3_走进linux 驱动开发 之 内核模块
  13. java asm methodvisitor 定义局部变量_Java ASM3学习(3)
  14. 电商系统设计之商品 (上)
  15. 随机生成爆破密码字典.txt
  16. 开发软件安装教程-MATLAB2016b安装教程图解
  17. Docker 容器内体验 WebSSH
  18. “对症下药”的11种新的编程语言
  19. 苹果怎么登录服务器未响应,王者荣耀登陆游戏服务器未响应该怎么解决 王者荣耀无法登陆解决办法...
  20. 移动设备app横竖屏幕测试

热门文章

  1. python 常见算法题
  2. 广东惠州港口吞吐量稳中有升
  3. 小白如何通过markdown文件自制kindle的 MOBI 格式文档
  4. PostMan测试http请求
  5. python eel 多线程_使用EEL将数据从Python发送到Javascript - javascript
  6. python 简洁优雅的装饰数据类——dataclass(通过生成只有部分属性值的子类解决初始化时没有默认值必须传所有字段值的问题)
  7. 国产CAD制图软件中怎么设置两点标注?
  8. 根据微信的code_url 给前端返回二维码图片--转换成base
  9. stol函数在linux下使用,C++中进制转换问题
  10. 这套Github上40K+star面试笔记,可以帮你搞定95%以上的Java面试