美文网首页日更成长营自学编程Python
自学Python:计算分数的精确值

自学Python:计算分数的精确值

作者: 小强聊成长 | 来源:发表于2021-12-24 12:38 被阅读0次

    使用数组精确计算M/N(0<M<N≤100)的值。假如M/N是无限循环小数,则计算并输出它的第一循环节,同时要求输出循环节的起止位置(小数位的序号)。

    由于计算机字长的限制,常规的浮点运算都有精度限制,为了得到高精度的计算结果,就必须自行设计实现方法。

    为了实现高精度的计算,可将商存放在一维数组中,数组中的每个元素存放一位十进制数,即商的第一位存放在第一个元素中,商的第二位存放在第二个元素中,以此类推。这样就可以使用数组来表示一个高精度的计算结果。

    下面直接上代码:

    ########################

    if __name__ == "__main__":

        ys = [0]*101    # ys存放除法的余数

        shang = [0]*101    # shang 依次存放商的每一位

        print("请输入分子与分母大于0,小于等于100的分数")

        m = int(input("分子m = "))    # 分子

        n = int(input("分母n = "))      # 分母

        print("输入的分数为:%d/%d" %(m, n))

        print("%d/%d 的准确值是:0." %(m, n), end="")

        for i in range(1, 101):        # i商的位数

            ys[m] = i    # m:得到的余数;ys[m]:该余数对应的商的位数

            m *= 10    # 余数扩大10倍

            shang[i] = m // n      # 商

            m = m % n      # 求余数

            if m == 0:      # 余数为0则表示是有限小数

                j = 1

                while j <= i:

                    print("%d" %shang[j], end="")  # 输出商

                    j += 1

                break    # 退出循环

            if ys[m] != 0:  # 若该余数对应的位在前面已经出现过

                j = 1

                while j <= i:

                    print("%d" %shang[j], end="")  # 输出循环小数

                    j += 1

                print("\n分数的第一个循环节:%d" %ys[m])

                print("循环节的起始位置为:%d" %i)

                break

    ########################

    执行结果:

    请输入分子与分母大于0,小于等于100的分数

    分子m = 1

    分母n = 3

    输入的分数为:1/3

    1/3 的准确值是:0.3

    -----

    请输入分子与分母大于0,小于等于100的分数

    分子m = 22

    分母n = 79

    输入的分数为:22/79

    22/79 的准确值是:0.2784810126582

    分数的第一个循环节:1

    循环节的起始位置为:13

    ________________END______________

    相关文章

      网友评论

        本文标题:自学Python:计算分数的精确值

        本文链接:https://www.haomeiwen.com/subject/hchpfrtx.html