1000的阶乘计算

描述

输入一个正整数_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()))
相关文章
相关标签/搜索