我目前在repl.it上学习Python,我的一项工作有问题。
我的代码应该是:
1. 输入给定的整数X
2. 找出最大整数n,其中2ⁿ小于或等于X.
3. 打印指数值(n)和表达式2的结果。
但我的代码失败了,因为机器插入了太大的数字,如10 ^ 8 + 2。该计划完全失败
以下是我正在处理的代码:
X = int(input())
a = X//2
while a > -1:
if (2**a) < =x:
print(a)
print(2**a)
break
else:
a -= 1
任何人都可以找到我这个问题的另一个解决方案,或者改进我运行时工作的代码吗?它适用于少量(小于10 ^ 6),但程序冻结。
提前致谢!
答案 0 :(得分:0)
当然,我不能提到你提到的“太大的输入”(因为你没有提供),但至于问题本身,它可以通过以下方式更容易解决:
import numpy as np
a = int(np.log2(your_input))
答案 1 :(得分:0)
我看到的第一个问题是你的代码
if (2**a) < =x:
print(a)
print(2**a)
您计算2**a
两次的值。一个好的开始可能是将2**a
的值保存到变量中。但是,由于您只使用2的幂,您还可以查看按位运算。因此,您可以编写
a = X//2
a= X >> 2
而不是写2**a
写
temp = 1 << a
使用2的幂时,使用按位运算可以明显更快。
答案 2 :(得分:0)
我做到了! (当然使用你的一些解决方案) 这是我的老师代码:
<form id="chardiv" action="comments.php" method="post">
Name:<br>
<input type="text" name="mod_name" required><br>
Message:<br>
<textarea class='autoExpand' rows='3' data-min-rows='3' placeholder='Auto-Expanding Textarea' name="topic" required></textarea>
<input type="submit" value="Submit"><br>
</form>