如何解决当数字是 2 的幂时,while 循环不会停止
我在 python 控制台应用程序中遇到了一些问题。 我编写了一个分解控制台应用程序。 它运行良好,但是当我输入一个 2 的幂的数字(如 4、8、16)时,while 循环不会停止。 所以它不会打印任何东西,代码也不会停止。 波纹管是我的代码。
import math
n=input("Input check number:")
n=int(n)
sent= str(n) + "=1"
for m in range(2,int(n / 2)+1):
if n % m == 0:
k = n
i = 0
while k % m == 0:
k = k / m
i += 1
sent = sent + "*" + str(m) + "^" + str(i)
if sent == str(n)+ "=1":
sent = sent + "*" + str(n)
print(sent)
我想要有人帮助我。 提前致谢。
解决方法
问题在于您没有在 n
循环内更改 m
或 while
。因此,例如,对于输入 n=4
,m=2
,k
的结果是 n/m=2
,它满足 k%m==0
并且因为 n
和 { {1}} 会发生变化,因此它会永远运行。
您可以通过修改 while m
中的 n
来简化代码,使其在可被当前除数 loop
整除的情况下继续减小。您不能对 m
执行相同操作,因为 k
再次使用 k
行重置为 n
,并且它将以原始数字开头,给出错误输出。>
这里是带有外部 k = n
循环的代码的一些修改版本:
while
输出(对于输入 n=input("Input check number:")
n = int(n)
sent = str(n) + "=1"
m = 2 # start division with 2
while n > 1: # keep dividing till the number is greater than 1
if m > n:
break
i = 0
while n % m == 0:
n = n / m # modify n by dividing it with current divisor
i += 1
if i > 0: # add only if m divides n at least once
sent = sent + "*" + str(m) + "^" + str(i)
m = m + 1
if sent == str(n)+ "=1":
sent = sent + "*" + str(n)
print(sent)
):
18
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。