分数和小数的相互转换

【分数->小数】

给定分数的分子N和分母A,输出其小数表示法,小数的循环节用括号括起来。

N/A              小数

5/1              5

125/12        10.41(6)

8/235           0.0340425531914...

235/8           29.375

10/3             3.(3)

       

 以 125/12 和 235/8 看看计算过程:

分子

分母

余数

125

12

10

5

5*10

12

4

2

2*10

12

1

8

8*10

12

6

8

 

分子

分母

余数

235

8

29

3

3*10

8

3

6

6*10

8

7

4

4*10

8

5

0

 

 结果可以分成3种情况:

1)整数,没有小数部分:分子除以分母,余数直接为0。

2)能除尽的小数,即有限小数:在某一步,余数会=0。

3)无限循环小数:在某一步除法以后得到的余数,已经在之前出现过了。实现时,需要保存每一步的商和余数。

 

而无限不循环小数不能表示成分数。对于任意分数a/b,每次除法得到的余数,只能是1到a-1中的某个数,因此在计算了a步之后,一共能得到a个在计算过程中产生的余数。根据抽屉原理,这a个余数中必定有两个数是相等的。由于每一步得到的余数在下一步将作为被除数,因此出现第一个重复的余数时,就开始循环了。

 

对于2)和3)情况,有可能小数部分非常长,所以给定一个精度,超过精度位数直接截断。

 

 

 【小数->分数】

采用斜率逼近法。

分数相当于平面上直线的斜率。对于整数来说,初始设置分子为0,分母为1,即平行于X轴,将这个分数的值同输入的小数比较,如果分数太大,则增加分母的值,如分数太小,则增加分子的值,直到分数的值在指定的精度范围内接近这个斜率(就是输入的小数)。负数的话,单独处理一下负号就行了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值