計算兩個數的平均值的三種方法
阿新 • • 發佈:2019-09-05
第一種方法
思路:兩數相加然後除以2
參考程式碼:
#include<stdio.h> int main() { int a = 10; int b = 20; int aver = (a + b) / 2; //int aver = (a + b) >> 1; //右移一位相當於除以二 printf("avg=%d\n", aver); return 0; }
缺點:a+b變的更大了,如果a和b都是一個很大的數可能會超出整形所能儲儲存的最大範圍,導致整型溢位,從而計算錯誤
第二種方法
思路:用較大的數減去較小的數然後除以2在加到較小的那個數上可以得到兩個數的平均值(如下圖)
這裡寫圖片描述:
參考程式碼:
#include<stdio.h> int main() { int a = 10; int b = 20; int aver = a + (b - a) / 2; //int aver = a + (b - a) >> 1; //右移一位相當於除以二 printf("avg=%d\n", aver); return 0; }
優點:很好的防止了整形溢位的問題
第三種方法
思路:將兩個數的二進位制位分為相同部分和不同部分,利用按位與求出相同部分的平均數,然後再用異或求出不同部分的平均數,加起來就是兩個數的平均數
如:
參考程式碼
#include<stdio.h> int main() { int a = 10; int b = 20; int aver = (a&b) + ((a^b) >> 1); printf("aver=%d\n", aver); return 0; }
<