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()))
相關文章
相關標籤/搜索