• 蓝桥杯




    思路:
    n的数值很大,python自带的算高精度加减乘还行,除法是真没找到自带方法实现。
    所以需要模拟除法的过程,以n/m为例:
    n >= m:商上n // m,n = n % m
    n < m:商上n * 10 // m,n = n * 10 % m
    (笔算一下100/3的过程就可以推导)

    同时,题目给出了剪枝条件,要么是有限小数,要么是无限循环小数
    如何处理循环小数?-> 记录n的使用情况(即check[x] = n=x的时候,对应的小数第几位),只要某一次的n已经被访问过了,那么表示出现了循环。再把循环部分直接拼接到字符串后面即可,其实还可以优化不用拼接,直接根据当前字符串长度与目标长度的差值,进行取余balabla,应该更快(不想写了..

    代码:

    n, m, t = list(map(int, input("").split(" ")))
    while n >= m:
        n = n % m
    # 当前正在计算小数第几位
    i = 0
    # 结果字符串
    s = ""
    # 记录n的使用情况
    check = {}
    # n < m
    while n:
        if n in check:
            # 表示开始出现了循环,找到上一个n的位置
            last = check[n]
            # 循环的部分是last~i-1
            circle = s[last:i]
            # 这里+10就是保证字符串的长度足够(加上其他的也可以
            s += ((t-i)//len(circle) + 10) * circle
            break
        check[n] = i
        s += str(n*10//m)
        n = n*10%m
        i += 1
        if i == t+10:
            break
    s = s[t-1:t+2]
    # 不足的补上"0"
    s += (3 - len(s)) * "0"
    print(s)
    
  • 相关阅读:
    http调用接口,并解析返回的xml数据,显示在jsp页面上
    项目与tomcat
    项目依赖和部署
    数据库上操作实例 找到要操作的表---筛选---选中要操作的字段---输入
    端口占用问题
    快捷键
    获取页面上的数据
    布尔类型
    EL表达式
    mac oxs 上查看进程监听的端口号 lsof
  • 原文地址:https://www.cnblogs.com/NFii/p/12391109.html
Copyright © 2020-2023  润新知