求平均数的四种方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求平均数的四种方法相关的知识,希望对你有一定的参考价值。
用c语言求平均数有四种方法,各有利弊。1.第一种是最常规的做法
例
> int main()
{
int a = 10;
int b = 5;
c = (a + b) / 2;
system("pause");
return 0;
}
这种方法有缺陷,如果a和b足够大,以致于两数之和超出了intmax(整型所能代表的最
大值),所以不建议使用这种方法。
2.最常用的方法
例
> int main()
{
int a = 10;
int b = 5;
c = a+(b-a)/2;
system("pause");
return 0;
}
这种优于第一种方法,这个算法c的值永远不会超过intmax,所以一般这种算法比较常见
3.用位操作表示
例
> int main()
{
int a = 10;
int b = 5;
c = (a&b) + (a^b)/2;
system("pause");
return 0;
}
a&b得到的是a和b的二进制里对应位相同的那一位,且为1,a^b得到的是a和b的二进制
里对应位不同的那一位留下来,且为1,相同位全部变成0。另外,a与b的和可以理解为
a与b的每个二进制位的权重之和,可以拆分成a和b相同二进制位的和加上不同二进制位
的和。所以a&b即为相同的二进制的对应位的和除以2,a^b即为不同的二进制的对应位
的和。这种算法的缺陷是a和b只能是整数。
4.也用位操作符表示
例
> int main()
{
int a = 10;
int b = 5;
c = (a&b) + ((a^b) >> 1);
system("pause");
return 0;
}
向右移有除以二的效果
第三种与第四种方法都较难理解透彻, 所以轻易不要尝试,但如果非要用的话,优先
用右移的方法,效率较高。
以上是关于求平均数的四种方法的主要内容,如果未能解决你的问题,请参考以下文章
Stream Collectors.groupingBy的四种用法 解决分组统计(计数求和平均数等)范围统计分组合并分组结果自定义映射等问题