题目
给出两个数a和b,求a和b的平均值(只考虑两数的平均数仍为整数的情况)
思路1
题目看上去很简单,直接给出第一种思路
int a = 3;
int b = 5;
int avg = (a + b) / 2;
看上去没什么问题,但是一旦整形溢出,这个求法就会出现不可预料的错误
所以下面有另一种求法
int avg = a / 2 + b / 2;
但是这两种求法都是非常简单的,也不是我想分享的,否则这篇博客也没有存在的意义
思路2
假设有两桶水,一桶比另一桶多,我们可以取出多的那一桶比少的那一桶多出来的部分,将那一部分多的均分放入两桶,两桶就有相同的水了
代码实现也很简单,如下:
int avg = b + (a -b) / 2;
//假设a比b大
思路3
下面介绍一种比较巧妙的求法,上课时候老师提到的一种求法
先看代码:
int avg = (a & b) + ((a ^ b) >> 1);