C++ 代码用于示例运行,但在提交时失败:Hackerrank问题

C++ 代码用于示例运行,但在提交时失败:Hackerrank问题,c++,C++,我试图解决这个问题,但我的代码在提交时失败了。仅清除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 l

我试图解决这个问题,但我的代码在提交时失败了。仅清除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;
}
void miniMaxSum(向量arr)
{
int l=阵列大小();
排序(arr.begin(),arr.end());
long long int min=arr[0]+arr[1]+arr[2]+arr[3];
长整型最大值=arr[l-1]+arr[l-2]+arr[l-3]+arr[l-4];

cout您正在将左侧的值计算为
int
,然后将其分配给
无符号长

long long int min = static_cast<long long int>(arr[0]) + arr[1] + arr[2] + arr[3];
为了防止溢出,您应该将至少一个值强制转换为
unsigned long

long long int min = static_cast<long long int>(arr[0]) + arr[1] + arr[2] + arr[3];
long long int min=static_cast(arr[0])+arr[1]+arr[2]+arr[3];

例如,如果使用
double
并看到相同的行为,也会出现同样的情况。

将左侧的值计算为
int
,然后将其分配给
unsigned long

long long int min = static_cast<long long int>(arr[0]) + arr[1] + arr[2] + arr[3];
为了防止溢出,您应该将至少一个值强制转换为
unsigned long

long long int min = static_cast<long long int>(arr[0]) + arr[1] + arr[2] + arr[3];
long long int min=static_cast(arr[0])+arr[1]+arr[2]+arr[3];

例如,如果您使用双精度
并看到相同的行为,也会出现同样的情况。

long long int min=arr[0]+arr[1]+…;
使用
int
s进行计算,并将最终结果转换为
long long
。您可能需要类似于
long long int min=(long long long long)arr[0]+arr[1]+arr[2]+…;
。感谢它通过了所有测试用例:)
long long int min=arr[0]+arr[1]+…;
使用
int
s进行计算,并将最终结果转换为
long
。您可能需要类似于
long long int min=(long long long)arr[0]+arr[1]+arr[2]+…;
。感谢它通过了所有测试用例:)是的,明白了,谢谢..我只是想问一下什么时候使用静态强制转换,什么时候像上面的注释一样将用于强制转换的类型放在括号中。两者之间有区别吗。@ShivamSingh在cpp中有几种类型的强制转换执行不同的操作。idea是指你明确地说出你想要执行什么类型的强制转换。只使用括号的强制转换称为c-style强制转换,可以执行所有的强制转换。如果你正在编写高质量的cpp代码,就不应该使用它。是的,明白了,谢谢。我只是想问你什么时候使用静态强制转换,什么时候才将用于强制转换的类型放在括号中就像上面的评论一样。两者之间有区别吗?@ShivamSingh在cpp中有几种类型的强制转换可以执行不同的事情。其思想是你明确地说出你想要执行的强制转换。只使用括号的强制转换可以执行所有的强制转换。如果你写的是cpp代码。