当前位置: 首页 > 面试题库 >

怎么计算21!(21阶乘)迅速?

司马高昂
2023-03-14
问题内容

我正在快速计算阶乘的函数。像这样

func factorial(factorialNumber: UInt64) -> UInt64 {
    if factorialNumber == 0 {
        return 1
    } else {
        return factorialNumber * factorial(factorialNumber - 1)
    }
}

let x = factorial(20)

该函数可以计算到20。

我认为阶乘(21)的值大于UINT64_MAX。

那么该如何计算21!(21阶乘)迅速?


问题答案:

无符号64位整数的最大值为18,446,744,073,709,551,615。虽然21!=51,090,942,171,709,440,000。对于这种情况,您需要一个Big Integer类型。我在Swift中发现了一个关于BigInteger的问题。该链接中有一个用于Big Integer的库。



 类似资料:
  • 我如何使程序执行一个新的或重复的操作,或要求用户再次输入一个数字,并知道它的阶乘。

  • 问题内容: 我正在尝试计算阶乘产生的数字的尾随零(这意味着数字变得很大)。以下代码采用一个数字,计算该数字的阶乘,并计算尾随零。但是,当数字大约为25!时,numZeros将不起作用。 我并不担心这段代码的效率,并且我知道有多种方法可以使这段代码的效率更好。我要弄清楚的是为什么计数大于25的数字结尾的零!不管用。 有任何想法吗? 问题答案: 您的任务不是计算阶乘,而是计算零的数量。一个好的解决方案

  • AJAX,Asynchronous JavaScript and XML(异步的 JavaScript 和 XML), 是与在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术。

  • 宏 宏是用来给语言添加新的结构,新的元素的。它们是一些在读入期(而不是编译期)就会实际代码替换的一个机制。 对于函数来说,它们的所有的参数都会被evaluate的, 而宏则会自动判断哪些参数需要evaluate。 这对于实现像 (if _condition_ _then-expr_ _else-expr_) 这样的结构是非常重要的。 如果 condition 是 true , 那么只有 "then

  • 绝影第一次去公司周总先给他介绍同事:“小李是秘书,小周是程序员……以后你就跟着小周,他很厉害的,要好好跟他学习。” 他对小周点点头,本来想跟他打个招呼,但实在又不好称呼他。周总当然可以叫他小周,自己总不能这样叫他,叫“周哥”,绝影又觉得特别别扭,以前他还很少这样称呼一个人,所以他也就只好跟他点点头。 介绍完,周总安排绝影就坐小周旁边的办公桌,说:“那你们先忙吧,我就不打扰你们了。遇到什么问题要多问

  • worksheets() 从workbook工作簿中返回一个包含worksheet工作表的list列表。 返回类型:一个worksheet对象列表。 worksheets() 方法返回workbook工作簿中的worksheet工作簿对象列表。如果要对workbook工作簿中的每一个worksheet工作表都进行某项操作,会很有用: for worksheet in workbook.worksh