蓝桥杯--阶乘计算--Python实现+注释

题目

题目描述
输入一个正整数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!的准确值。

因为python语言本身具有大数据和傅里叶乘法优化功能,具有无限精度的int类型。可以不通过数组存储阶乘位就能AC,解法一二,正常做法:解法三。

解法一:直接调用math库factorial函数

#主页有蓝桥杯真题免费下载
import math
print(math.factorial(int(input())))
#math.factorial(x)	 返回x的阶乘
#>>> math.factorial(5)
#120

解法二:for循环

n=int(input())
ans=1
for i in range(1,n+1):
    ans*=i
print(ans)

解法三:数组存储

n=int(input())
L=[1]#赋初值,不然无法启动
def loop(n):
    global L
    for i in range(len(L)):#正常乘法,每位各自乘
        L[i]*=n
    for i in range(len(L)-1):#进位,但是首位进位不在此列
        L[i+1]+=int(L[i]/10)
        L[i]=L[i]%10
    L1=list(str(L[-1]))#分解首项
    L.pop()#删除首项
    for i in range(len(L1)-1,-1,-1):#倒序归入原序列,注意倒叙!!!
        L.append(int(L1[i]))
for i in range(2,n+1):#n!定义
    loop(i)
for i in range(len(L)):#转化形式
    L[i]=str(L[i])
print(''.join(L[::-1]))#join()输出

你可能感兴趣的:(蓝桥杯Python,python,算法,数据结构)