計算等差數列之和

題目:求1+2+…+n,
要求:不能使用乘除法、for、while、if、else、switch、case等關鍵字以及條件判斷語句(A?B:C)。算法

先來看看解題的算法過程:3d

解釋一下吧!blog

學過計算機技術的人都知道,書上在很靠前的位置總會有這麼一句話,2進制下乘法就是錯位相加。這就是原理。int有32個bit位,我就把這錯位相加寫32次。其實就是乘法。這個的算法效率比遞歸快。遞歸O(n),這個O(1),代碼多又怎樣?用戶又看不出來。遞歸

還有其餘思路沒?
能用乘除更簡單,能夠使用求等差數列公式求和公式 Sn=n(a1+an)/2 或Sn=na1+n(n-1)d/2       (具體過程請本身查相關資料)it

求等差數列的前N項和公式n*(n+1)/2,既然二進制乘法是加法,把n*(n+1)/2轉換成二進制計算不就更簡單點麼,以上思路留着你們思考,或等我未來再嘗試着實現。效率

出處:qq算法羣聊天記錄原理

相關文章
相關標籤/搜索