题目
标答
是要 n 的阶乘小于 m 并返回 n 不是返回 n的阶乘
你的代码是 i 与 m比较 如果跟标准答案一样的话应该是 j 与 m比较,并且要返回 i 而不是 j,也不要用小于等于 而要用 小于。
它的代码中在进入循环并退出时 i 的阶乘已经大于 m了所以需要 i -1 回到前一次 ,而且 在计算最后一次阶乘后 还进行了一次 i++。所以需要返回 i - 2
如果有用,麻烦点个采纳。谢谢~
这是一个典型的二分查找问题,需要找到满足 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