下面是代码&对于输入n =(1e18 + 1)*(1e18)和k =(1e18),代码应打印“ YES”。但它显示“否”。这是因为'a'的值为1e18。但理想情况下,“ a”应为(1e18 + 1)。请帮忙。
for t in range(int(input())):
n,k=input().split()
n=int(n)
k=int(k)
if n>=k*k:
a=n/k
print("a is {}".format(a))
if a%k==0:
print ("a%k is {} ans {}".format(a%k, "NO"))
else:
print("a%k is {} ans {}".format(a%k, "YES"))
else:
print("YES")
输入:
3
1 1
30 5
1000000000000000001000000000000000000 1000000000000000000
输出:
a is 1.0
a%k is 0.0 and ans is NO
a is 6.0
a%k is 1.0 and ans is YES
a is 1e+18
a%k is 0.0 and ans is NO
这里的问题是您使用的是“正常”/
除法,该除法总是产生浮点数。由于float的精度有限,因此1e18 + 1会四舍五入为1e18。
要解决该问题,请使用//
给出整数的整数除法。
通过更改此行:
a = n // k
您的代码有效,如以下示例输出所示:
1
1000000000000000001000000000000000000 1000000000000000000
a is 1000000000000000001
a%k is 1 ans YES
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句