排序数组中两个最小数字之和的结果不正确
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};
我想用 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};