今天小编给大家分享一下python怎么求N的阶乘的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。本题要求编写程序,计算N的阶乘。输入格免费云主机域名式:输入在一行中给出一个正整数 N。输出格式:在一行中按照“product = F”的格式输出阶乘的值F,请注意等号的左右各有一个空格。题目保证计算结果不超过双精度范围。输入样例:5输出样例:product = 120问题描述:输入一个正整数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
输出格式:输出n!的准确值。样例输入:10样例输出:3628800看到这题我首先想到的是两种比较简单的解法,一是循环,二是递归。思路比较简单,就是定义一个变量ns赋予一个初始值1,然后利用for循环直接累乘得到最终结果。递归也比较好理解,当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!的结果。接下来我讲下思路:首先定义一个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次:⑴ j=0⑴ j=0⑴ j=0⑴ j=0j循环结束,carry>0执行while循环⑴ j=0⑵ j=1j循环结束,carry>0执行while循环这样看下来是否发现和小学的时候学的竖式乘法运算过程很相似,从低位数到高位数(ns[j],j in range(0,length))依次与乘数(i)相乘,大于十则进位(carry=temp/10>0,若ns[length]*i+carry > 10则length+1)。以上就是“python怎么求N的阶乘”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注百云主机行业资讯频道。
本篇内容介绍了“原生JS怎么生成九宫格”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!涉及知识点,请1、熟免费云主机域名练利用js做出html样式2、对onmou…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。