下面是代码&对于输入n=(1e18+1)*(1e18)和k=(1e18),代码应该输出"YES“。但它会打印"NO“。这是因为'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发布于 2019-08-10 23:57:52
这里的问题是,你使用的是“正常”的/除法,它总是产生一个浮点数。由于浮点数的精度有限,因此1e18+1取整为1e18。
要解决这个问题,可以使用整数除法//,它可以得到一个整数。
通过更改此行:
a = n // k您的代码可以正常工作,如以下示例输出所示:
1
1000000000000000001000000000000000000 1000000000000000000
a is 1000000000000000001
a%k is 1 ans YEShttps://stackoverflow.com/questions/57443552
复制相似问题