如何確定一個N!末尾有多少個零
題目:1*2*3*……*100 求結果末尾有多少個零
?
分析:一般類似的題目都會蘊含某種規律或簡便方法的,階乘末尾一個零表示一個進位,則相當于乘以10而10 是由2*5所得,在1~100當中,可以產生10的有:0 2 4 5 6 8 結尾的數字,顯然2是足夠的,因為4、6、8當中都含有因子2,所以都可看當是2,那么關鍵在于5的數量了那么該問題的實質是要求出1~100含有多少個5由特殊推廣到一般的論證過程可得:? ?? ?
? ?? ???1、 每隔5個,會產生一個0,比如 5, 10 ,15,20.。。
? ?? ???2 、每隔 5×5 個會多產生出一個0,比如 25,50,75,100?
? ?? ???3 、每隔 5×5×5 會多出一個0,比如125.
所以100!末尾有多少個零為:? ?? ???100/5+100/25=20+4=24那么1000!末尾有多少個零呢?同理得:? ?? ???1000/5+1000/25+1000/125=200+40+8+1=249
到此,問題解決了,但我們在學習過程中應當學會發散思維、舉一反三
接著,請問N!的末尾有多少個零呢??
其實 也是同理的
? ?? ???N/5+N/25+……
?
如計算 2009! 的末尾有多少個0:2009/5 = 401? ?? ??? 1~2009之間有 401 個數是 5 的倍數(余數省略).401/5 = 80? ?? ?? ??? 1~2009 之間有 80 個數是 25 的倍數.80/5 = 16? ?? ?? ?? ? 1~2009 之間有 16 個數是 125 的倍數.??16/5 = 3? ?? ?? ?? ?? ? 1~2009 之間有 3個數是 625 的倍數.? ?? ?3/5 = 0? ?? ?? ?? ?? ?? ? 1~2009 之間有 0 個數是 3125 的倍數. 所以, 2009! 的末尾有 401 + 80 + 16 + 3 = 500 個0. |
看下面代碼:
?
- int?fun1(int?n)??
- {??
- ????int?num?=?0;??
- ??
- ????while?(n)??
- ????{??
- ????????num?+=?n?/?5;??
- ????????n?=?n?/?5;??
- ????}??
- ??
- ????return?num;??
- }??
?
?
- int?fun2(int?n)??
- {??
- ????int?num?=?0;??
- ????int?i,?j;??
- ??
- ????for?(i?=?5;?i?<=?n;?i?+=?5)??
- ????{??
- ????????j?=?i;??
- ????????while?(j?%?5?==?0)??
- ????????{??
- ????????????num++;??
- ????????????j?/=?5;??
- ????????}??
- ????}??
- ????return?num;??
- }??
此題擴展:求擴展N!的二進制表示中最低位1中的位置。相當于求質因數的2的個數。
?
?
10000的階乘,末尾有多少個連續的零?答案: 10000/5+10000/25+10000/125+10000/625+10000/3125=2000+400+80+16+3=2499
?
1到100的階乘的和的末位數是幾?答案:3這題找規律,1!=1; 2!=2; 3!=6; 4!=24; 5!=120;…你可以發現5的階乘之后的末尾都是0。所以只有1到4的階乘會產生個位數,所以1+2+6+24=33,所以答案就是3!