问:请问在C或C++中如何求N个数的平均值?这N个数直接相加肯定会溢出因为INT类型只有32位有什么好的算法可以求吗?
答:如果要特别精确的话,就要用字符串表示的大整数了,
如果不需要特别精确的话
用double加下面的公式还是比较接近结果的
假设前n个数值的平均值为V(n),第n+1个数为T, 则前n+1个数的平均值为:
V(n+1) = (T - V(n)) / (n + 1) + V(n)
另一种类似的思路:
假定是偶数个数字:
1 2 3 4 5 6 7 8
-------------------------------------------- 第一轮计算每两个数的平均值
1.5 3.5 5.5 7.5
-------------------------------------------- 第二轮计算每两个数的平均值
2.5 6.5
-------------------------------------------- 第三轮计算每两个数的平均值
4.5 <-- 这就是最后的平均值
如果是奇数个数字
1 2 3 4 5 6 7 8 9
----------------------------------------------------- 第一轮计算每两个数的平均值,最后一个数字不算
1.5 3.5 5.5 7.5 9
----------------------------------------------------- 第二轮计算每两个数的平均值,最后一个数字不算
2.5 6.5 9
----------------------------------------------------- 第三轮计算每两个数的平均值,最后一个数字不算
4.5(权重是8/9) 9(权重是1/9)
所以平均值 = 4.5 / 9 * 8 + 9 / 9 * 1 = 5 (注意要先除后乘,防止溢出)
原文链接: https://www.cnblogs.com/iroultron/archive/2013/06/13/3133973.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/92070
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!