趣味百道之巧算末位

2021-08-22 16:29:05 字數 1105 閱讀 5825

今天做了幾道趣味百題,發現一些很有意思的演算法,其實不如說是理解方式,理解題意並從另乙個角度破題,成為這幾題菜鳥玩家的首選

首先第六題,題目設計讓求13^13,如果按照我開始的想法,用遞迴求結果再取餘,就會出現負數的結果,後來找到了另一種邊做乘邊取餘,因為每次計算只有後三位對題目要求有幫助,所以用迴圈求每次積的後三位,避免了前面的問題。

#include #define t 1

#define f 0

int fac(int n,int m)//遞迴失敗

return fac(n-1,m)*m;

}int main()

//unsigned int i = fac(13,13) % 1000;

printf("後三位的結果是%d\n",last);

return 0;

}

第七題是求100的階乘結尾有幾個0

#include int main()

} printf("100的階乘末尾0的數量為:%d\n",count);

return 0;

}

乙個數的末尾有幾個0,取決於乘數因子的2和5數對

先來數5因子有幾個:在100內,5作為因子的數有5, 10, 15, 20, 25... 總共有20個。但是注意到25, 50, 75, 100都包含了2個5作為因子(25=5*5, 50=2*5*5)

因此對於這些數,我們要多數一次。所以總共就是有24個5因子。

從公式角度: 5因子的數目 = 100/5 + 100/(5^2) + 100/(5^3) + ... = 24 (必須是整數)

現在再來數2因子有幾個:2, 4, 6, 8, 10, ... 總共有100/2=50個2因子,100/4=25個4因子(要多計數一次),100/8=12個8因子(要多計數一次),...

所以  2因子的數目 = 100/2 + 100/(2^2) + 100/(2^3) + 100/(2^4) + 100/(2^5) + 100/(2^6) + 100/(2^7) + ... = 97

綜上所述,共有24個5因子 和 97個2因子,所以能湊24 個 (2,5) 對。

因此100的階乘也就有24個結尾零

趣味百題之趣味猜想

coding utf 8 import sys reload sys sys.setdefaultencoding utf 8 created on wed dec 07 18 43 25 2016 趣味百題之趣味猜想 author onlyyo 1.角谷猜想的內容為 任意給定乙個自然數,若它為偶數...

趣味演算法 巧填運算子

給定乙個整數陣列,和乙個單獨的數字,在陣列的每乙個元素中間填加 或 使其運算結果等於單獨的數字例如給定的陣列為 數字為 9。運算結果為7 2 4 9 規則1 陣列中元素的位置不能變化。規則2 如果無法實現則輸出 invalid 舉例 input 1 2 3 4 10 1 2 3 4 5 output...

三道NOIP 巧題

圖轉侵刪 題解 隔k 1個位置設乙個關鍵位 則每個區間都恰好包含乙個關鍵位 預處理每個位置到左右關鍵位的前字尾積即可 題解 two pointers hsz秒想出了另一種做法 所求答案為點對最小切比雪夫距離 旋轉座標系轉換為曼哈頓距離 然後資料結構隨便做 居然還有這種操作 題解令最終字符集s 先把s...