摘要:学堂码匠求某个数字的阶乘,很难吗看上去这道题异常简单,却不曾想里面暗藏杀机,让不少前端面试的英雄好汉折戟沉沙。更多前端开发面试真题更多面试真题,请移步微信小程序决胜前端
面试真题题目HTML5学堂-码匠:求某个数字的阶乘,很难吗?看上去这道题异常简单,却不曾想里面暗藏杀机,让不少前端面试的英雄好汉折戟沉沙。
如何求“大数”的阶乘(如1000的阶乘、2000的阶乘)
什么是阶乘一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。
5的阶乘 5! 等价于
54321
在大多数浏览器当中:
● 最小数字是5e-324;(可以理解为浮点后324位)
● 最大数字是1.7976931348623157e+308;(可以理解为309位)
对于超过此范围的数字,会显示为Infinity或 -Infinity(正无穷、负无穷)。
function fact(maxNum) { if (maxNum > 1) { return maxNum * fact(maxNum - 1); } else { return 1; } } var result = fact(170); console.log(result);
运行结果:
7.257415615307994e+306
对于170!以下的阶乘,是可以使用递归实现的,对于大于170的数字,阶乘数已超出范围,会显示为Infinity。
大数阶乘如何实现 实现思路将一个数字的每一位(个位、十位、百位、千位……)拆分出来,构成一个数组。
每次计算时,针对每一位进行数学运算,并遵循逢十进一的原则,修改数组中每一个数组元素的内容。
在完成所有运算之后,可以通过数组的join方法,将每一位连接起来,组成“字符串”输出~
var result = [1]; var maxNum = 300; for (var num = 2; num <= maxNum; num++) { for (var i = 0, plus = 0; i < result.length || plus != 0; i++) { var count = (i < result.length) ? (num * result[i] + plus) : plus; result[i] = count % 10; plus = (count - result[i]) / 10; }; }; console.log(result.reverse().join(""));300! 的运算结果 部分代码说明
将当前被乘数拆分为数组,每位的位数分别进行乘法运算。
当count大于10时,进位,再让下一位数字与之计算。此时,需要有一个变量(plus)存储前一位得到的余数。
对于位数发生变化时(如结果从两位数在计算之后变化为三位数),当前的result长度不能满足,所以需要为for循环增加额外的判断条件。
更多面试真题,请移步微信小程序 —— 决胜前端
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/84894.html
摘要:学堂码匠求某个数字的阶乘,很难吗看上去这道题异常简单,却不曾想里面暗藏杀机,让不少前端面试的英雄好汉折戟沉沙。更多前端开发面试真题更多面试真题,请移步微信小程序决胜前端 HTML5学堂-码匠:求某个数字的阶乘,很难吗?看上去这道题异常简单,却不曾想里面暗藏杀机,让不少前端面试的英雄好汉折戟沉沙。 面试真题题目 如何求大数的阶乘(如1000的阶乘、2000的阶乘) showImg(htt...
摘要:学堂码匠求某个数字的阶乘,很难吗看上去这道题异常简单,却不曾想里面暗藏杀机,让不少前端面试的英雄好汉折戟沉沙。更多前端开发面试真题更多面试真题,请移步微信小程序决胜前端 HTML5学堂-码匠:求某个数字的阶乘,很难吗?看上去这道题异常简单,却不曾想里面暗藏杀机,让不少前端面试的英雄好汉折戟沉沙。 面试真题题目 如何求大数的阶乘(如1000的阶乘、2000的阶乘) showImg(htt...
摘要:线程安全吗虽然天天用,但是真的没考虑过这个问题。其实,线程不安全。没有对多线程问题进行处理,举个方法的例子就能证明它线程不安全。线程不安全的要比线程安全的执行效率高。 引言 最近学校的氛围比较活跃,考研的复习,不考研的都在写简历准备面试。 看了看,最近也没有好公司来办宣讲会,也就没了投简历的意向。最近看了看面试题,想着补一补基础,以后面几家Spring Cloud的企业,去和面试官交流...
阅读 510·2023-04-26 00:33
阅读 3537·2021-11-24 09:39
阅读 2896·2021-09-22 15:34
阅读 2315·2019-08-23 18:07
阅读 2911·2019-08-23 18:04
阅读 3693·2019-08-23 16:06
阅读 2893·2019-08-23 15:27
阅读 1613·2019-08-23 14:32