求满足n!<m的最大数n

题目

img

标答

img


我的过程

img


标答中fun函数,for循环这一块我不理解,请问我的代码为什么出错,怎么理解标答的for循环

是要 n 的阶乘小于 m 并返回 n 不是返回 n的阶乘

你的代码是 i 与 m比较 如果跟标准答案一样的话应该是 j 与 m比较,并且要返回 i 而不是 j,也不要用小于等于 而要用 小于。

它的代码中在进入循环并退出时 i 的阶乘已经大于 m了所以需要 i -1 回到前一次 ,而且 在计算最后一次阶乘后 还进行了一次 i++。所以需要返回 i - 2


如果有用,麻烦点个采纳。谢谢~

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7713694
  • 这篇博客也不错, 你可以看下现有n个数,要求将他们按照从大到小的顺序输出(纯一维数组的思想)
  • 以下回答由chatgpt基于相关博客总结生成:

    这是一个典型的二分查找问题,需要找到满足 n! < m 的最大的 n。可以使用循环来进行二分查找,再结合阶乘的特点来确定最大的 n,具体步骤如下:

    def find_n(m):
        if m == 1:
            return 0  # 避免 m = 1 的情况下 n 取 -1
        left, right = 1, m
        while left <= right:
            mid = (left + right) // 2  # 取中位数
            mul = 1  # 计算 n! 的值,使用乘法进行计算
            for i in range(1, mid+1):
                mul *= i
                if mul >= m:  # 当乘积大于等于 m 时停止计算
                    break
            if mul < m:
                left = mid + 1  # 当前 mid 范围太小,需要向右找
            else:
                right = mid - 1  # 当前 mid 范围太大,需要向左找
        return right