HTML5學堂-碼匠:求某個數字的階乘,很難嗎?看上去這道題異常簡單,卻未曾想裏面暗藏殺機,讓很多前端面試的英雄好漢折戟沉沙。前端
如何求「大數」的階乘(如1000的階乘、2000的階乘)面試
明確一下這些詞語和概念沒有什麼很差~一方面可以讓本身可以更專業的談論知識,另外一方面,在面試的時候也可以應對一些「愛問前端名詞」的面試官~小程序
So easy!正常一個一個乘出來不就行了?微信小程序
for循環便可,再高大上點,用個遞歸不就搞定了?數組
等等!大公司面試題會這麼簡單?瀏覽器
若是我沒記錯……JS有位數限制微信
不是有科學計數法麼……函數
一個正整數的階乘(英語:factorial)是全部小於及等於該數的正整數的積,而且0的階乘爲1。code
5的階乘 —— 5! 等價於5*4*3*2*1遞歸
在大多數瀏覽器當中:
● 最小數字是5e-324;(能夠理解爲浮點後324位)
● 最大數字是1.7976931348623157e+308;(能夠理解爲309位)
對於超過此範圍的數字,會顯示爲Infinity或 -Infinity(正無窮、負無窮)。
運行結果:7.257415615307994e+306
將一個數字的每一位(個位、十位、百位、千位……)拆分出來,構成一個數組。
每次計算時,針對每一位進行數學運算,並遵循逢十進一的原則,修改數組中每個數組元素的內容。
在完成全部運算以後,能夠經過數組的join方法,將每一位鏈接起來,組成「字符串」輸出~
將當前被乘數拆分爲數組,每位的位數分別進行乘法運算。
當count大於10時,進位,再讓下一位數字與之計算。此時,須要有一個變量(plus)存儲前一位獲得的餘數。
對於位數發生變化時(如結果從兩位數在計算以後變化爲三位數),當前的result長度不能知足,因此須要爲for循環增長額外的判斷條件。
更多面試真題,請移步微信小程序 —— 決勝前端