python - (1e18+1)(1e18)/(1e18) 的除法在 Python 3.6 中给出 (1e18)
问题描述
下面是输入 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
解决方案
这里的问题是您使用的是“正常”/
除法,它总是产生一个浮点数。由于浮点数的精度有限,因此 1e18+1 会四舍五入为 1e18。
为了解决这个问题,使用整数除法//
,它给出一个整数。
通过更改此行:
a = n // k
您的代码有效,如此示例输出所示:
1
1000000000000000001000000000000000000 1000000000000000000
a is 1000000000000000001
a%k is 1 ans YES