求兩個整型數的平均數

2021-09-08 01:30:37 字數 1123 閱讀 4775

兩數相加除以2

這種寫法是簡單將兩個數相加,然後除以2。

#include int main()

這種**是有弊端的,當x+y的值大於2147483674時會發生溢位(32位機器上int佔4個位元組,範圍是-2147483648~2147483674),這種情況下兩個正數求出的平均值就是負數!如下:

#include int main()

執行結果如下圖

下面這種寫法可以避免這種弊端。

2.兩數相減除以2再加兩數間的較小數

有x = 6, y = 10;x和y的平均數是(10+6)/2 = 8;可以看出,y(10)比x(6)大4,把y大於x的這部分的(4)一半拿出來給x,那麼x和y就一樣大了,就是原來x和y的平均數,即x和y的平均數就是兩數相減除以2再加上較小數。

**如下:

#include int main()

執行結果如下:

除此之外還可以用位操作來計算。

3.兩數相與加上兩數異或除以2

兩數相與是將兩個數中相同的位留下來,舉個例子,x = 14(二進位製碼為1110,前面的0在這裡為了方便計算就忽略掉),y = 7(0111)。x&y = 6(0110),與操作下來,兩個數中bit位相同的bit位就留下來了,接下來就算bit位不同的部分,這部分可以用異或操作來得到。x^y = 1001;然後除以2加上前面bit位相同的部分,就是這兩個數的平均數。

這種方法和上面第二種有異曲同工之妙。都是先把相同的部分提出來,然後剩下的除以2再加上之前提出來的部分就是平均數,只不過第二種將較小數提了出來,第三種將兩個數中共有的部分提了出來。

**如下:

#include int main()

第三種方法看上去較第二種方法複雜一點,但第三種方法不必寫第二種方法中的判斷兩個數中的較小數這一步。

案例 求平均數

需求 編寫乙個方法,實現任意數求平均數 去除數字收納櫃的最大和最小,然後在算平均數,保留小數點後兩位 普通版本 letfn function 給ary排序,去除首未,ary.sort function a,b ary.pop ayr.shift 然後求和,最後求平均 let total 0 for ...

求兩個整型數的中間值

已知有兩個整型變數int a和int b,求這兩個數的中間值,即int c c a b 2 你能想出上述操作可能會存在的問題嗎?答案是,加法過程中可能會溢位。因此,我們可以這麼做 c a 2 b 2 雖然解決了溢位的問題,但仍然還有缺點,你能想到是什麼嗎?答案是,用了兩次除法,執行效率會顯著降低,因...

怎麼求平均數 小學奧數知識點趣味學習 平均數問題

編輯 一 專題簡析 在日常生活中,我們會遇到下面的問題 有幾個杯子,裡面的水有多有少,為了使杯中水一樣多,就將水多的杯子裡的水倒進水少的杯子裡,反覆幾次,直到幾個杯子裡的水一樣多。這就是我們所講的 移多補少 通常稱之為平均數問題。解答平均數應用題關鍵是要求出總數量和總份數,然後再根據 總數量 總份數...