我根据欧几里得除法定理编写了一个计算商和余数的代码。
a,b=input().split()
a=int(a)
b=int(b)
if(a<0 and b>0):
q=int(a/b)-1
r=a-(b*q)
print(q,end=" ")
print(r)
elif(a>0 and b<0):
q=int(a/b)
r=a-(b*q)
print(q,end=" ")
print(r)
elif(a>0 and b>0):
q=int(a/b)
r=a-(b*q)
print(q,end=" ")
print(r)
elif(a<0 and b<0):
q=int(a/b)-1
r=a-(b*q)
print(q,end=" ")
print(r)
这里是根据欧几里得除法则来计算商和余数的任何错误。?实际上这是uri在线法官的1837年没问题。我编写这段代码并提交,但显示40%错误的答案。程序说明:{{3 }}
答案 0 :(得分:0)
错误的答案是由于您当前的实现并不能确保计算得出的r
在a,b < 0
时为正数。实际上,如果您检查提供的链接,您将看到该定理定义了0 ≤ r < |b|
使用输入值a = -7
和b = -3
测试当前算法,您将得到q = 1
和r = -4
。但正如我们所说,我们需要r ≥ 0
使用输入值a = -7
和b = -3
再次尝试以下代码。这次您将获得q = 3
和r = 2
,它们也满足a = b × q + r
等式:-7 = -3 x 3 + 2
最后-为了避免造成误解-我添加了一个条件来控制并明确涵盖b = 0的那些输入,这是欧几里德除法则不接受的另一种情况
def euclidean_division(a, b):
if(a < 0 and b > 0):
q = int(a/b) - 1
r = a - (b*q)
elif(a > 0 and b < 0):
q = int(a/b)
r = a - (b*q)
elif(a > 0 and b > 0):
q = int(a/b)
r = a - (b*q)
elif(a < 0 and b < 0):
q = int((a+b)/b)
r = a - (b*q)
return q, r
def main():
print("Please insert two integer values separated by a space")
print("NOTE: the second integer is NOT allowed to be equal to zero")
first_input, second_input = input().split()
first_int=int(first_input)
second_int=int(second_input)
if(second_int != 0):
first_output, second_output = euclidean_division(first_int, second_int)
print("q = " + str(first_output) + " r = " + str(second_output))
else:
print("Second integer must be other than 0")
print("Try again\n")
main()
if __name__ == "__main__":
main()
注意:此示例还证明了使用r ≥ 0
来保证解决方案唯一性的重要性
祝你好运!