我正在尝试解决问题https://www.hackerrank.com/challenges/mini-max-sum/problem,但是我的代码提交失败。 15个测试用例中仅清除5个。我认为它与使用64位整数有关。我对此一无所知,是什么导致我的程序失败。
下面的程序展示了我的方法
void miniMaxSum(vector<int> arr)
{
int l = arr.size();
sort(arr.begin(),arr.end());
long long int min = arr[0] + arr[1] + arr[2] + arr[3];
long long int max = arr[l - 1] + arr[l - 2] + arr[l - 3] + arr[l-4];
cout<<min<<" "<<max<<endl;
}
编译器输出错误。我不知道我在做什么错,请帮忙。
答案 0 :(得分:2)
您正在将左侧的值计算为int
,然后将其分配给unsigned long long
。
为防止溢出,您应该将至少一个值强制转换为unsigned long long
。
long long int min = static_cast<long long int>(arr[0]) + arr[1] + arr[2] + arr[3];
例如,如果您使用double
并且看到相同的行为,则同样。