当前位置: 首页 > 知识库问答 >
问题:

int((n1)/2)和(n1)//2之间的差异是什么?

吕和风
2023-03-14

在python中解决我使用https://www.spoj.com/problems/APM问题

t = int(input())
while t > 0:
    n= int(input())

    if n%2 == 0:
        print(-1)
    else:
        n = int((n+1)/2)
        print(n,n-1)
    t -= 1 

此代码被拒绝,

但对于这一点:

t = int(input())

while t > 0:
    n= int(input())

    if n%2 == 0:
        print(-1)
    else:
        n = (n+1)//2
        print(n,n-1)
    t -= 1  

接受,我的问题是为什么int((n1)/2)给出不同的ans,那么(n1)//2在大数n时

共有3个答案

易和怡
2023-03-14

Python中的双斜杠执行整数除法,而单斜杠执行常规的旧除法,这可能产生浮点。

我在你链接到的问题中没有看到任何地方要求你有一个整数答案,但是我猜想作者希望它是这样的,以防止任何浮点精度错误阻止自动化测试用例的成功。

糜宜民
2023-03-14

考虑:

import sys

print(sys.float_info)

i=(10**17+2)/2
j=(10**16+2)/2

print(i,j)
print(type(i), type(j))

i,j=int(i),int(j)

print(i,j)
print(type(i), type(j))

虽然您还远未达到< code>float的限制——您已经达到了float可以存储的位数的限制——所以在这个限制之后的所有数字都将在指数表示法中被截断——所以它们将是相同数量级的值,但是后面所有超出的数字都将是< code>0。

结论:

转换类型需要非常小心地处理细节 - 只需使用 \\ 即可。

孟俊发
2023-03-14

即使对于小 n也确实整数(n*(n-1)/2) == n*(n-1)//2,对于大 n 可能会失败。原因是/是浮点除法,这可能导致信息丢失,int()无法恢复的信息:

>>> n = 10**18 - 1
>>> n*(n-1)
999999999999999997000000000000000002
>>> n*(n-1)//2
499999999999999998500000000000000001
>>> n*(n-1)/2
5e+35
>>> int(n*(n-1)/2)
500000000000000021210318687008980992

信息的丢失可以在5e 35499999999999999998500000000000000001

 类似资料:
  • 在编程时,我注意到math.exp(2)和math.e**2的结果之间存在差异。如下所示,在计算e^1时不会出现这种差异。 我不是一个有经验的程序员,我想知道为什么这不一样?我想这和围捕有关。python文档说返回,但这似乎并不完全正确。那么为什么操作与不同呢?

  • ,和? 为什么只获得二次权的复杂根?我应该把它专门用于我的平方根吗?他们在背景中有什么不同?

  • 问题内容: 我有一个基于JSF 1.2的webapp,从中复制了JSTL导入 您也可以在Internet上的许多地方找到此导入。我不记得是否在我以前的Web项目上合作与否,在任何情况下,它不工作,我目前的JSF 2.0 Web应用基础。我从集装箱收到警告说: 警告:此页面需要使用前缀c声明的XML名称空间http://java.sun.com/jstl/core,但该名称空间不存在标记库。 然后,

  • 问题内容: 很快就有两个相等运算符:double equals( )和Triple equals( ),两者之间有什么区别? 问题答案: 简而言之: 操作员检查其实例值是否相等, 操作员检查引用是否指向同一实例, 长答案: 类是引用类型,可能有多个常量和变量在幕后引用类的同一单个实例。类引用保留在运行时堆栈(RTS)中,其实例保留在内存的堆区域中。当您控制平等时, 这意味着它们的实例是否彼此相等。

  • 问题内容: 我正在使用SASS进行某些样式设置。我有基色,并且我希望所有其他颜色都相对于基色进行更改。我已经按照需要设置了颜色,但是颜色是硬编码的,而不是根据基本颜色计算得出的。 是否有一种工具可以快速为两种颜色之间的差异生成SASS颜色功能?但是它仅允许我使用滑块生成输出颜色,而不是自己设置输出颜色并生成函数。 希望这是有道理的。 问题答案: 您可以签出以下资源: 基本上,这是它的实质: 您想要

  • 问题内容: 好的,所以我使用了很多输入命令,并且我了解在Python2中我可以做到: 但是现在我使用Python 3,我想知道两者之间有什么区别: 和: 我什么时候必须使用一个或另一个? 问题答案: 在Python 3.x中,成为,并删除了Python2.x 。因此,通过在3.x中执行此操作: 您基本上是在2.x中执行此操作: 在3.x中执行以下操作: 与在2.x中执行此操作相同: 以下是Pyth