编辑:当使用x = 1000000000000000000和y = 12进行检查时,x // y和int(x / y)返回不同的结果。
print(1000000000000000000//12, int(1000000000000000000/12))
>>83333333333333333 83333333333333328
摘自What is the difference between '/' and '//' when used for division?的答案 我现在看到,除数运算符通常对于大于10 ^ 17的数字表现异常。因此,如果要除以大数,请使用//运算符。
编辑前(现在似乎可以忽略):
x // y和int(x / y)在Python中返回相同的结果吗?如果答案为否,则可以忽略下一行。
一些背景-
对于Codechef上的问题-problem link,我提交了两个程序,它们仅在发生除法的部分不同。
第一个解决方案https://www.codechef.com/viewsolution/24978403
import math
MOD = 1000000007
test = int(input())
for _ in range(test):
n,k = map(int, input().split())
first=k-1;
diff=n-1;
t = (first+diff)//(diff)
y=(2*(first)-(t-1)*(diff))
ans = (y*t)//2;
ans = ans%MOD
print(ans)
第二个解决方案https://www.codechef.com/viewsolution/24978385
import math
MOD = 1000000007
test = int(input())
for _ in range(test):
n,k = map(int, input().split())
first=k-1;
diff=n-1;
t = int((first+diff)/(diff))
y=(2*(first)-(t-1)*(diff))
ans = (y*t)//2;
ans = ans%MOD
print(ans)
解决方案#1通过了所有测试案例,但是解决方案#2在一个测试案例中失败了。
唯一的区别在于第8行,其中第一个解中的t计算为t = (first+diff)//(diff)
,第二个解中的t计算为t = int((first+diff)/(diff))
。
请注意,输入始终是整数,因此变量first
和diff
是整数。代码在Python 3.6中。
那么python返回的x // y和int(x / y)是否不同?还是我想念其他东西?