我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python怎么求N的阶乘

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python怎么求N的阶乘

今天小编给大家分享一下python怎么求N的阶乘的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

求N的阶乘

本题要求编写程序,计算N的阶乘。

输入格式:

输入在一行中给出一个正整数 N。

输出格式:

在一行中按照“product = F”的格式输出阶乘的值F,请注意等号的左右各有一个空格。题目保证计算结果不超过双精度范围。

输入样例:

5

输出样例:

product = 120

x = int(input())a = 1for i in range(1, x+1):    a = a*iprint("product = %d" % float(a))

实现阶乘的三种解法

问题描述:

输入一个正整数n,输出n!的值。

其中n!=123*…*n。

算法描述:

n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。

将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。

首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。

输入格式:

输入包含一个正整数n,n<=1000。

输出格式:

输出n!的准确值。

样例输入:

10

样例输出:

3628800

看到这题我首先想到的是两种比较简单的解法,一是循环,二是递归。

解法一:循环

n = int(input())ns = 1for i in range(1,n+1):    ns = ns*iprint(ns)

思路比较简单,就是定义一个变量ns赋予一个初始值1,然后利用for循环直接累乘得到最终结果。

解法二:递归

def factorial(n):    if n==1:        return n    else:        return n*factorial(n-1)n = int(input())res = factorial(n)print(res)

递归也比较好理解,当n == 2,return 2 * 1;n == 3,return 3*(2 * 1);n==4,return 4*(3*(2*1))。以此类推,再将最终的结果赋予res将其打印即可。

这两种方法都比较简单,但很显然都不符合题目要求的 “使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位”,所以我们要想办法利用数组来得到n!的结果。

解法三:数组

n= int(input())ns = [0 for i in range(10000) ]length = 1ns[0] = length = 1if n>=2:    for i in range(2,n+1):        carry = 0        for j in range(length):            temp = ns[j] * i + carry            carry = int(temp/10)            ns[j] = temp % 10        while carry>0:            ns[length] += carry%10            length+=1            carry = int(carry/10)while length>0:    length -=1    print(ns[length],end='')

接下来我讲下思路:

首先定义一个ns数组用来存储n!的各个位数上的数值,利用for循环给ns加入10000个0值,以方便后面直接根据index对数组进行操作。

然后定义length作为 “数组的长度”(有真实数值的而非自动添加的0) 也即n!的结果的位数。

之后也必须用到for循环进行累乘,但跟解法一的直接累乘不同,这里是乘数(即i)跟各个位上的数分别相乘,若结果大于等于10则carry>0即向前进一位数值为carry,若j循环结束后carry>0则说明需要在当前ns的“长度”上进一位,所以length+1即位数+1,这里carry起的就是判断是否进位的作用,而length则代表着结果的位数。可能这么说有些抽象,下面我们通过分解运行过程来更直观的阐述上面的想法。

例如我们现在需要求5!,分五步,即i循环5次:

①i=1
    ns[0] = length =1 , carry = 0    ∴j in range(1)

⑴ j=0

    temp = ns[j] * i + carry = ns[0] * i + carry =1*1+0=1  # temp为第j位数与i相乘并加上j-1位数与i相乘后进位的值的结果    carry = int(temp/10) = 1/10 = 0      # carry=0所以不用进位    ns[j] = temp % 10 即 ns[0] = 1 % 10 =1   #只取个位数值作为第j位的值
②i=2
    ns[0] = 1, length =1 , carry = 0    ∴j in range(1)

⑴ j=0

    temp = ns[j] * i + carry = ns[0] * i + carry =1*2+0=2  # temp为第j位数与i相乘并加上j-1位数与i相乘后进位的值的结果    carry = int(temp/10) = 2 / 10 = 0      # carry=0所以不用进位    ns[j] = temp % 10 即 ns[0] = 2 % 10 =2   #只取个位数值作为第j位的值    #这样就已经的到2!的值了即2
③i=3
    ns[0] = 2, length =1 , carry = 0    ∴j in range(1)

⑴ j=0

    temp = ns[j] * i + carry = ns[0] * i + carry =2*3+0=6  # temp为第j位数与i相乘并加上j-1位数与i相乘后进位的值的结果    carry = int(temp/10) = 6 / 10 = 0      # carry=0所以不用进位    ns[j] = temp % 10 即 ns[0] = 6 % 10 =6   #只取个位数值作为第j位的值    #这样就已经的到3!的值了即6
④i=4
    ns[0] = 6, length =1 , carry = 0    ∴j in range(1)

⑴ j=0

    temp = ns[j] * i + carry = ns[0] * i + carry =6*4+0=24  # temp为第j位数与i相乘并加上j-1位数与i相乘后进位的值的结果    carry = int(temp/10) = 24 / 10 = 2      # carry=2>0所以需要向前进2    ns[j] = temp % 10 即 ns[0] = 24 % 10 =4   #只取个位数值作为第j位的值

j循环结束,carry>0执行while循环

    while carry>0:                    ns[length] += carry%10 即 ns[1] += 2 % 10 = 2  #carry = 2 所以向前进2            length+=1 即 length =1+1=2 #位数加一            carry = int(carry/10) = 2 / 10 = 0 # carry = 2<10所以不需要继续进位,while循环结束            ∴length = 2 , ns[0] = 4 ,ns[1] = 2    #这样就得到4!的值ns[1]*10+ns[0] 即 24,输出时可直接倒着打印然后end=''而不需要每位数乘10*n再相加
⑤i=5
    ns[0] = 4, ns[1] = 2 length =2 , carry = 0    ∴j in range(2)

⑴ j=0

    temp = ns[j] * i + carry = ns[0] * i + carry =4*5+0=20  # temp为第j位数与i相乘并加上j-1位数与i相乘后进位的值的结果    carry = int(temp/10) = 20 / 10 = 2      # carry=2>0所以需要向前进2    ns[j] = temp % 10 即 ns[0] = 20 % 10 =0   #只取个位数值作为第j位的值

⑵ j=1

    temp = ns[j] * i + carry = ns[1] * i + carry =2*5+2=12  # temp为第j位数与i相乘并加上j-1位数与i相乘后进位的值的结果    carry = int(temp/10) = 12 / 10 = 1      # carry=1>0所以需要向前进1    ns[j] = temp % 10 即 ns[1] = 12 % 10 =2   #只取个位数值作为第j位的值

j循环结束,carry>0执行while循环

    while carry>0:                    ns[length] += carry%10 即 ns[2] += 1 % 10 = 1  #carry = 1 所以向前进2            length+=1 即 length =2 +1 = 3 #位数加一            carry = int(carry/10) = 1 / 10 = 0 # carry = 1<10所以不需要继续进位,while循环结束            ∴length = 3 , ns[0] = 0 , ns[1] = 2 , ns[2] = 1    # 这样就得到5!的值ns[2] ns[1] ns[0]即 120

这样看下来是否发现和小学的时候学的竖式乘法运算过程很相似,从低位数到高位数(ns[j],j in range(0,length))依次与乘数(i)相乘,大于十则进位(carry=temp/10>0,若ns[length]*i+carry > 10则length+1)。

以上就是“python怎么求N的阶乘”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python怎么求N的阶乘

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python怎么求N的阶乘

今天小编给大家分享一下python怎么求N的阶乘的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。求N的阶乘本题要求编写程序,计
2023-06-30

c语言怎么求n的阶乘

C语言可以使用循环来求n的阶乘。以下是一种常见的求阶乘的方法:```c#include int main() {int n, i;unsigned long long factorial = 1;printf("请输入一个正整数: ");s
2023-08-09

怎么使用python递归算法求n的阶乘

你可以使用下面的代码来使用递归算法求n的阶乘:```pythondef factorial(n):if n == 0 or n == 1:return 1else:return n * factorial(n-1)# 示例调用result
2023-08-09

python中怎么使用递归法求n的阶乘

在Python中,可以使用递归方法来计算n的阶乘。递归是指函数调用自身的过程。下面是一个使用递归法计算n的阶乘的示例代码:```pythondef factorial(n):if n == 0 or n == 1:return 1else:
2023-09-15

c语言n阶乘求和怎么写

c语言求n阶乘和的步骤:获取n的值。初始化sum为0,储存阶乘和。遍历1到n,计算每个i的阶乘并累加到sum。输出sum,即n阶乘和。C 语言 N 阶乘求和如何用 C 语言计算 N 阶乘的和?使用 C 语言计算 N 阶乘的和,可以按照以
c语言n阶乘求和怎么写
2024-05-21

Python怎么实现数学阶乘n!

这篇文章主要介绍了Python怎么实现数学阶乘n!的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python怎么实现数学阶乘n!文章都会有所收获,下面我们一起来看看吧。python实现阶乘-基础版本什么是阶乘呢
2023-07-05

c语言n的阶乘怎么写

在 c 语言中,计算 n 的阶乘有两种方法:递归方法:编写一个函数,函数调用自身,阶乘等于 n 乘以 n-1 的阶乘。循环方法:使用循环变量逐步计算阶乘,阶乘等于 1 乘以 2,再乘以 3,直至乘以 n。C 语言中计算 n 的阶乘阶乘,记
c语言n的阶乘怎么写
2024-05-23

c语言n的阶乘怎么编译

在 c 语言中编译 n 的阶乘步骤:创建源文件并输入代码编译源文件运行可执行文件详细解释:创建源文件,定义变量和函数,提示用户输入数字。编译源文件,生成可执行文件。运行可执行文件,计算并打印 n 的阶乘。在 C 语言中编译 n 的阶乘在
c语言n的阶乘怎么编译
2024-05-21

python怎么求出输入数的阶乘

这篇文章主要介绍了python怎么求出输入数的阶乘,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。python求出输入数阶乘的方法:首先定义一个【factorial()】函数,
2023-06-08

javascript怎么求13阶乘

方法:1、利用for循环,语法“var cj=1;for(var i=1;i<=13;i++){cj *= i;}”;2、利用递归函数,语法“function fac(n){if(n <= 1){return 1;}else{return n*fac(--n);}}”;3、利用三元运算符,语法“function fac(n){return n>1?n*fac(n-1):1}”。
2022-11-22

如何在Python 中计算N的阶乘

本篇文章为大家展示了如何在Python 中计算N的阶乘,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1)使用循环计算阶乘def frac(n): r = 1 if n<=1: if n==
2023-06-09

php怎么用循环实现n的阶乘

php用循环实现n的阶乘的方法:1、新建一个php示例文件;2、添加php的界定符;3、声明PHP与浏览器交互的文件类型和编码;4、定义一个函数compute(),并且添加参数$num;5、使用for语句计算参数$num的阶乘;6、使用return语句返回计算后的结果即可。
2023-05-14

php如何实现n的阶乘

这篇文章主要介绍php如何实现n的阶乘,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php实现n的阶乘的方法:1、通过普通递归实现,代码如“function fact(int $n): int{...}”;2、通过普
2023-06-15

怎么在javascript中求阶乘

怎么在javascript中求阶乘?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。javascript求阶乘的方法:1、利用while循环求指定数的阶乘;2、利用
2023-06-14

c语言怎么计算整数n的阶乘

要计算整数n的阶乘,可以使用循环结构来实现。以下是一个计算整数n的阶乘的c语言代码示例:#include int main() {int n, i;long long factorial = 1;printf("请输入一
c语言怎么计算整数n的阶乘
2024-03-04

python小代码之阶乘求和

需求:阶乘:也是数学里的一种术语;阶乘指从1乘以2乘以3乘以4一直乘到所要求的数;在表达阶乘时,就使用“!”来表示。如h阶乘,就表示为h!;阶乘一般很难计算,因为积都很大。提问:求1+2!+3!+...+20!的和实现环境:python3编
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录