1. 程式人生 > >藍橋杯基礎練習 階乘計算(簡單模擬)

藍橋杯基礎練習 階乘計算(簡單模擬)

 基礎練習 階乘計算   時間限制:1.0s   記憶體限制:512.0MB 問題描述   輸入一個正整數n,輸出n!的值。
  其中n!=1*2*3*…*n。 演算法描述   n!可能很大,而計算機能表示的整數範圍有限,需要使用高精度計算的方法。使用一個數組A來表示一個大整數aA[0]表示a的個位,A[1]表示a的十位,依次類推。
  將a乘以一個整數k變為將陣列A的每一個元素都乘以k,請注意處理相應的進位。
  首先將a設為1,然後乘2,乘3,當乘到n時,即得到了n!的值。 輸入格式   輸入包含一個正整數nn<=1000。 輸出格式   輸出n!的準確值。 樣例輸入 10 樣例輸出 3628800

程式設計思想:簡單模擬。

AC code:

#include<stdio.h>
#include<iostream>
#include<cstring>
#include<math.h>
#include<algorithm>
using namespace std;
void fac(int n)
{
	int i,j,head,tail;
	int arr[100010];
	if(n==1)
	{
		printf("1\n");
	}
	else
	{
		memset(arr,0,sizeof(arr));
		head=tail=0;
		arr[tail]=1;
		for(i=2;i<=n;i++)
		{
			int c=0;
			for(j=head;j<=tail;j++)
			{
				int p=arr[j]*i+c;
				arr[j]=p%10;
				c=p/10;
			}
			while(c)
			{
				tail++;
				arr[tail]=c%10;
				c/=10;
			}
		}
		for(i=tail;i>=head;i--)
		{
			printf("%d",arr[i]);
		}
		puts("");
	}
} 
int main()
{
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		fac(n);
	}
	return 0;
}