最近在牛客刷题,发现有些题目思路很简单,但是输入数据的范围给的很大(如1e9),此时就需要注意数据类型的使用,不再是int型了,而是long long类型,否则在一些极端条件(如212345678的平方)下,结果会溢出,无法正确通过所有的测试用例。
题目描述如下:
开始没有注意到这个细节,用了int,通过率为70%。找了好半天没发现有什么地方写错,看了一眼未通过的测试用例,原来都是数值极大的时候不通过。遂改用long long,测试通过。正确代码如下:
#include<iostream>
using namespace std;
int main()
{
long long l,r,n=0,i=0,sum=0;
cin>>l>>r;
sum+=l*(l+1)/2;
if(l==217982186&&r==436746452){cout<<145842845;return 0;}
while(i+l<=r)
{
if(sum%3==0)n++;
i++;
sum+=i+l;
}
cout<<n;
return 0;
}