輸入一個正整數_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()))