1. 程式人生 > >計算兩個數的平均值的三種方法

計算兩個數的平均值的三種方法


第一種方法

    思路:兩數相加然後除以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;
    }
<