刷题笔记——被3整除(输入的数值极大时数据类型的选用)

最近在牛客刷题,发现有些题目思路很简单,但是输入数据的范围给的很大(如1e9),此时就需要注意数据类型的使用,不再是int型了,而是long long类型,否则在一些极端条件(如212345678的平方)下,结果会溢出,无法正确通过所有的测试用例。
题目描述如下:
刷题笔记——被3整除(输入的数值极大时数据类型的选用)_第1张图片
刷题笔记——被3整除(输入的数值极大时数据类型的选用)_第2张图片

开始没有注意到这个细节,用了int,通过率为70%。找了好半天没发现有什么地方写错,看了一眼未通过的测试用例,原来都是数值极大的时候不通过。遂改用long long,测试通过。正确代码如下:

#include
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<return 0;
}

你可能感兴趣的:(编程感悟,c++)