描述
输入一个正整数_n_,输出_n_!的值。
其中_n_!=1*2*3*…*_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
解决方案
正常的递归到1000会溢出,所以采用利用数组保存不同位输出结果
1、建立数组num[1],初始化n=1时的值
2、建立变量digit_num,记录数的位数,方便遍历循环数的各个位
3、for循环从2开始,建立外循环,初始化进位carry=0,建立内循环,遍历各个位数字,执行操作
4、倒序num数组输出结果
代码实现
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()))
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。