为什么Python在计算过程中会失去一些价值?



我正在尝试使用Python解决代码力的问题。 但我得到了错误的答案,然后我使用了C++并被录取了。 尽管我对两种语言都使用了相同的公式。我不明白我的错误。

这是问题链接:https://codeforces.com/contest/1371/problem/B我的 Python 解决方案:


t=int(input())

while(t >0):
t = t-1 

n,m = (input()).split()
a=int(n)
b=int(m)

if(a >b ):
ans= (b+1)*b /2
print(int (ans))
else:
a=a-1
ans = (a + 1) * a / 2
print(int (ans+1))

我的C++解决方案:


#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
int q;
cin>>q;
while(q--)
{
ll a,b;
cin>>a>>b;
if(a > b )
{
cout<< (b*(b+1))/2<<endl;
}
else
{
a--;
cout<< (a*(a+1))/2 +1 <<endl;
}
}
return 0;
}

我得到错误答案的测试用例:1000000000 818008580

预期:"334569018885812490",找到:"334569018885812480">

发生这种情况是由于此表达式中的精度损失:

ans = (b + 1) * b / 2

在新的蟒蛇/是一个浮子师,数量太大,无法放入尾数。请改用整数除法:

ans = (b + 1) * b // 2

这同样适用于第二个表达式。

最新更新