在利用二分法时,有的人常常会写成
int mid = ( left + right) / 2;
但是这个是不严谨的,在left+right > INT_MAX时会出现错误。
因此推荐使用
int mid = left + ( right - left) / 2;
示例如下:
#include<iostream>
using namespace std;
int main()
{
int a = 1, b = INT_MAX;
int mid1 = (a + b) / 2;
int mid2 = a + (b - a) / 2;
cout << "mid1 = "<< mid1 << endl;
cout << "mid2 = "<< mid2 << endl;
return 0;
}
结果