10000以內n的階乘
題目描述
求 10000以內n的階乘。
輸入格式
只有一行輸入,整數 n(0≤n≤10000)。
輸出格式
一行,即n!的值。
題目分析
n的階乘求法:1 * 2 * 3 * ……* n
(i=1乘到i=n)
這道題顯然是一道低精度乘高精度的題
其中i是小於10000的數,(i-1)的階乘是一個很大的數
要點:
1.用數組來存儲(i-1)!
2.找到一個變量存儲數組的個數——避免0的存在
算法流程:
1.輸入
2.1 先將i與數組裏的每一個值都乘一遍
2.2 處理普通位進位:
——向前進位num/10
——自身賦值num%10
2.3處理首位進位及確定數組長度
——保證首位>0
——如果首位需要進位 則使用while循環進位,每進一次此時數組的個數要++
3.輸出——從所記錄的數組長度開始逆序輸出
代碼如下
#include <bits/stdc++.h>
using namespace std;
int num[100000];
int main()
{
int n;
int i,j;
cin>>n;
int l;
l=1;//l記錄數組個數
num[1]=1;//給第一個數賦值,避免任何數乘0都得0
for(i=1;i<=n;i++)
{
for(int j=1;j<=l;j++)//i與數組裏的每一個值都乘一遍
{
num[j]*=i;
}
for(j=1;j<=l;j++)//普通位進位
{
num[j+1]+=num[j]/10;
num[j]%=10;
}
if(num[j]>0){//首位>0
while(num[j]>10)//處理首位進位
{
num[j+1]+=num[j]/10;
num[j]%=10;
j++;
}
l=j;//確定數組長度
}
}
for(i=l;i>=1;i--){
cout<<num[i];
}
return 0;
}