排序数组中两个最小数字之和的结果不正确

Incorrect result for the sum of the two lowest numbers in a sorted array

我想用 C 编写一个程序,打印给定数组中两个最小数字的总和。我试图解决它的方法是:首先,我用“bubbleSort”函数对数组进行排序,然后我只是将排序后的数组中的第一个和第二个元素相加 (arr[0] + arr[1])。它适用于许多其他示例,但下面代码示例中给出的数组给了我一个完全错误的结果;这是什么原因? 而且,这对我的程序来说是正确的解决方案吗,还是我应该改变我的方法?

int main(){
   int arr[] = {2000000000, 2000000000, 2000000000, 2000000000, 2000000000}; //unsorted array
   int n = sizeof(arr)/sizeof(arr[0]);

   bubbleSort(arr, n); //Function to Bubble Sort the given array

   printf("Sorted array: \n"); 
   printArray(arr, n); //prints sorted array, which in this particular case is just the same the original

   int result = arr[0] + arr[1]; // result should be "4000000000"
   printf("Result: %i\n", result); //Result is "-294967296", which is clearly incorrect

   return 0;
}

您得到的答案是垃圾值。存在整数溢出。因此,请改用 long int。像这样

long int arr[] = {2000000000, 2000000000, 2000000000, 2000000000, 2000000000};