输入一个正整数_n_,输出_n_!的值。
其中_n_!=1*2*3*…*_n_。git
算法描述
n!可能很大,而计算机能表示的整数范围有限,须要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。
将a乘以一个整数k变为将数组A的每个元素都乘以k,请注意处理相应的进位。
首先将a设为1,而后乘2,乘3,当乘到n时,即获得了n!的值。算法
输入格式
输入包含一个正整数n,n<=1000。数组
输出格式
输出n!的准确值。app
样例输入
10code
样例输出
3628800递归
正常的递归到1000会溢出,因此采用利用数组保存不一样位输出结果
一、创建数组num[1],初始化n=1时的值
二、创建变量digit_num,记录数的位数,方便遍历循环数的各个位
三、for循环从2开始,创建外循环,初始化进位carry=0,创建内循环,遍历各个位数字,执行操做
四、倒序num数组输出结果input
def factorial(n): num = [1] #初始值为1,若n=1,则返回1 digit_num = 1 #记录数位 for i in range(2,n+1): carry = 0 #记录进位 for j in range(digit_num): num[j] = num[j] * i + carry carry = num[j] // 10 #进位 num[j] = num[j] % 10 #取余占位 if carry > 0: #若最后进位显示不为0,则进栈占高位 digit_num += 1 num.append(carry) for i in range(digit_num-1,-1,-1):#因为数组内元素是从0位开始的,因此需倒序输出 print(num[i],end='') factorial(int(input()))