之前一直总是简单的想将分数化为小数进行计算,其实使用相应的结构进行分子分母的分开保存,可以有奇效;

分数的存储:

struct Fraction{

int up;

int down;

};

其中up代表分子,down代表分母;

对于分数,有基本的几个规则:

1.正负号挂在分子上;

2.当分数表示0的时候,分子为0,分母为1;

3.分子分母必须达到最简,也就是没有1以外的公约数;

当分数进行四则运算的时候,也是基于这三条的性质来进行化简;

Fraction reduction(Fraction result){

if(result.down<0){

result.up=-result.up;

result.down=-result.down;

}

if(result.up==0){

result.down=1;

}else{

int d=gcd(abs(result.up),abs(result.down));

result.up/=d;

result.down/=d;

}

return result;

}

其中值得注意的是进行最大公约数计算的时候一定要注意注意分子可能为负,所以要进行绝对值的提前处理;

分数的四则运算:

在上述化简函数的基础上,我们就可以根据该规则进行相应的四则运算,四则运算严格遵循计算的通分规律;

1.加法运算:

Fraction add(Fraction f1,Fraction f2){

Fraction result;

result.up=f1.up*f2.down+f2.up*f1.down;

result.down=f1.down*f2.down;

return reduction(result);

}

2.减法运算:

Fraction minu(Fraction f1,Fraction f2){

Fraction result;

result.up=f1.up*f2.down-f1.down*f2.up;

result.down=f1.down*f2.down;

return reduction(result);

}

3.乘法运算

Fraction multi(Fraction f1,Fraction f2){

Fraction result;

result.up=f1.up*f2.up;

result.down=f2.down*f2.down;

return reduction(result);

}

4.除法运算:

Fraction divide(Fraction f1,Fraction f2){

Fraction result;

result.up=f1.up*f2.down;

result.down=f2.up*f2.down;

return reduction(result);

}

值得注意的是这里采用的除法的倒数计算;

分数的输出形式:

对于一个正常形式的分数,往往有三种形式:

1.整数:此时只输出分子(由于程序代码里对分子分母进行化简,所以如果有整数分母一定为1);

2.真分数:此时按照a/b的格式输出;

3.假分数:此时应该在按照带分数的格式输出,并且符号在前;

代码如下:

void showResult(Fraction r){

r=reduction(r);

if(r.down==1)

printf("%lld",r.up);

else if(abs(r.up)>r.down){

printf("%d %d/%d",r.up/r.down,abs(r.up)%r.down,r.down);

}else{

printf("%d/%d",r.up,r.down);

}

}

值得注意的是当进行带分数计算的时候,计算其后真分数余数的时候,一定要注意abs绝对值得处理;

python输出假分数_分数的表示以及计算(c++)相关推荐

  1. python输出假分数_解析ArcGis的标注(一)——先看看分数式、假分数式标注是怎样实现的...

    该"标注"系列博文的标注引擎使用"标准标注引擎(standard label engine)",这个概念如不知道,可不理会,ArcGis默认标注引擎就是它. A ...

  2. python输出二进制数_二进制中1的个数(python)

    题目描述:输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 分析:如果一个整数不为0,那么这个整数至少有一位是1.如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1 ...

  3. python输出可执行文件_重定向-禁止在Python调用中输出可执行文件

    重定向-禁止在Python调用中输出可执行文件 我有一个名为B的二进制文件,该文件在调用时会生成输出. 如果从Bash shell调用它,则大多数输出将受到A > /dev/null的抑制.所有 ...

  4. python输出运行时间_分析python程序运行时间的几种方法

    最早见过手写的,类似于下面这种: 1 import datetime 2 3 def time_1(): 4 begin = datetime.datetime.now() 5 sum = 0 6 f ...

  5. python输出方格_使用Python实现LBM(格子法)方腔驱动流

    使用Python实现LBM(格子法)方腔驱动流 Python的不足: Python的最大优势也可能是它最大的弱点:它的灵活性和无类型的高级语法可能导致数据和计算密集型程序的性能不佳.-- 动态类型化解 ...

  6. python输出数学公式_高数计算,我Python替你承包了

    在学习与科研中,经常会遇到一些数学运算问题,使用计算机完成运算具有速度快和准确性高的优势.Python的Numpy包具有强大的科学运算功能,且具有其他许多主流科学计算语言不具备的免费.开源.轻量级和灵 ...

  7. python输出偶数_如何用python判断奇偶数

    问题分析:用Python编写一个程序,判断输入的数字是奇数还是偶数,并相应的输出信息,要判断一个数为奇数还是偶数,依据的是它被2除后的余数.因此可以用"%"运算符来计算并判断. 代 ...

  8. python输出玫瑰花_如何用python画玫瑰花

    源码如下:import turtle # 设置初始位置 turtle.penup() turtle.left(90) turtle.fd(200) turtle.pendown() turtle.ri ...

  9. 用python输出圣诞树_教你怎样用Python画了一棵圣诞树,赶紧来学习

    文中的文本及图片来源于互联网,仅作学习培训.沟通交流应用,不具备一切商业行为,如有什么问题请立即在线留言以作解决. 下列文章内容来源于IT新手入门 共享给大伙儿一篇文章,教你如何用Python画了一棵 ...

最新文章

  1. 暑期集训1:C++STL 练习题A:POJ-1833
  2. 「自然语言处理NLP」的“高光时刻” --- 28篇标志性论文
  3. 避免在Swift Struct中使用闭包
  4. linux——yum的搭建说明
  5. 还在为周会发愁?你需要这13篇最新论文 | 本周值得读
  6. java职业技能了解精通_如何通过精通数字分析来提升职业生涯的发展,第8部分...
  7. 输入一个十进制数,转化为二进制
  8. R语言-merge和rbind
  9. mysql group日期_MySQL GROUP BY使用datetime时的日期?
  10. Docker以及Registry介绍
  11. [转帖]java必备的开发知识和技能
  12. linux 6.8 多网卡绑定,Linux6.1/6.5 双网卡绑定
  13. java面向对象程序设计课后习题答案_JAVA面向对象程序设计课后习题参考答案
  14. Hibernate拦截器字段加密解密
  15. vb.net 教程 3-1 窗体编程基础 2
  16. win10运行窗口打开共享服务器很慢,win10局域网共享文件慢怎么办 局域网共享文件夹无法访问是什么原因...
  17. 【开箱即用】HTML5教程
  18. 超简单的QFN封装芯片的手工焊接方法,先收藏
  19. python中write函数%啥意思_python write( )函数
  20. Cocos2dx游戏教程(十五):“见缝插针”,愿你走出半生,归来仍是少年

热门文章

  1. IDEA中无法识别servlet类或找不到javax.servlet.*
  2. 链表反转相关的题(C++模板)
  3. Linux C++多线程同步的四种方式
  4. 【Python】如何在文件夹里批量分割图片?
  5. 02- 流行歌曲 最新热门
  6. PyTorch 官方教程发布,限时免费开放!
  7. 最大似然估计(MLE:样本观测总体参数)是如何工作的?
  8. 封装的可运行于winform与web的Log4Net的类库
  9. 读《李商隐诗集》有感
  10. FFmpg音视频入门教程