10000以內n的階乘

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;
 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章