python - (1e18+1)(1e18)/(1e18) 的除法在 Python 3.6 中给出 (1e18)

标签 python python-3.x

下面是代码 & 对于输入 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 。由于 float 的精度有限,1e18+1 四舍五入为 1e18。

为了解决这个问题,使用整数除法//,给出一个整数。

通过改变这一行:

a = n // k

您的代码有效,如示例输出所示:

1
1000000000000000001000000000000000000 1000000000000000000
a is 1000000000000000001
a%k is 1 ans YES

关于python - (1e18+1)(1e18)/(1e18) 的除法在 Python 3.6 中给出 (1e18),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57443552/

相关文章:

python - 如何测试类属性是否是实例方法

python - 如何 "denormalize"数据框/从许多二进制列中创建一列

python - 如何删除 Pandas DataFrame 中的小数点

python-3.x - 如何在conda环境中为python 3运行IDLE?

python - python2中的dict_proxy和python3中的mappingproxy有什么区别?

python - 如何使用 Elasticsearch 和Python有效地索引json文件?

python - 矩阵向量差的有效元素级argmin

python - 如何使用 Python 将自定义 TLS/SSL 证书绑定(bind)到 Azure 应用服务应用程序?

python - 实现由 GCS 触发的云功能以发布到 pubsub

python - 在python中将另一个项目作为模块导入