admin 管理员组

文章数量: 887021

使用函数调用方式解决:输入三个正整数a,b,n,求a/b精确到小数后第n位。

计算机在计算除法时,如果不能整除,会得到一个精确度有限的小数,但我们可以通过字符串的方式突破精度显示限制

一、分析结构

  • 形参:a,b,n
  • 分别对应:被除数,除数,精确的小数位
  • 概要:计算每一位的值后通过字符串形式拼接为结果

二、解决问题

1.定义函数

def _precise(a, b, n):

2.定义变量s(结果)并赋初值(即:字符串开头,例如:3.1415926…开头为“ 3. ”),整数部分即为a//b(取整部分)

s = str(a // b) + '.'

3.定义余数r

r = a % b

4.定义循环步进i

i = 0

5.定义循环来计算期望精度值,每一次循环计算一位小数(也可以在i<n后加上“and r != 0”,来确保在余数为0时停止循环)

while i < n:

6.编写循环体:
余数r = a % b,在第一次循环时将r(余数)扩大十倍后再除以b(除数)取整后得到第一位小数(以字符串拼接的形式拼接给s)
例:
20 / 3 第一次循环时等于:“6.” + “6”,第一次结束后s=“6.6”(字符串形式)

r = r * 10
s = s + str(r//b)

7.每次循环后,r又会获得新的值(即:原来的r * 10后除以 b余数)
例:还是拿上面的20/3举例,第一次循环时r = 2 * 10=20,除以b(也就是3)后,得到第一位小数6并且余下2,执行完**s = s + str(r//b)**后r = 20 % 3 = 2,然后等待下一次循环开始

r = r % b

8.设置步进i,循环体完成
例:比如用户输入的n = 10,i每次加1,加到9时停止,从0-9刚好10次循环,每次循环执行一次步骤6和7求出一位小数,10次刚好精确到第十位停止。

i = i + 1

9.最后输出s即可

print(s)

三、完整代码

def _precise(a, b, n):s = str(a // b) + '.'i = 0r = a % bwhile i < n:r = r * 10s = s + str(r//b)r = r % bi = i + 1print(s)#举例调用函数
_precise(6, 7, 6)
#即6除7取6位小数
#结果为	0.857143

本文标签: 使用函数调用方式解决输入三个正整数a b n,求ab精确到小数后第n位