1. 程式人生 > >演算法之階乘

演算法之階乘

問題描述   一個整數n的階乘可以寫成n!,它表示從1到n這n個整數的乘積。階乘的增長速度非常快,例如,13!就已經比較大了,已經無法存放在一個整型變數中;而35!就更大了,它已經無法存放在一個浮點型變數中。因此,當n比較大時,去計算n!是非常困難的。幸運的是,在本題中,我們的任務不是去計算n!,而是去計算n!最右邊的那個非0的數字是多少。例如,5! = 12345 = 120,因此5!最右邊的那個非0的數字是2。再如:7! = 5040,因此7!最右邊的那個非0的數字是4。請編寫一個程式,輸入一個整數n(n<=100),然後輸出n! 最右邊的那個非0的數字是多少。 輸入格式:輸入只有一個整數n。 輸出格式:輸出只有一個整數,即n! 最右邊的那個非0的數字。 樣例輸入:6 樣例輸出:2 程式碼實現:

#include<stdio.h>
using namespace std;
const int Data = 10;
int a[1000];
int main()
{
	int n, r = 0;
	scanf("%d", &n);
	a[0] = 1;
	int j = 0;
	while (n--){
		for (int i = 0; i <= j; i++){
			a[i] = a[i] * (n + 1) + r;
			r = a[i] / Data;
			a[i] %= Data;
		}
		if (r){
			j++; a[j] = r; r = 0;
		}
	}
	for (j = 0;; j++)
	if (a[j] % 10)
	{
		printf("%d", a[j] % 10);
		break;
	}
	printf("\n");
	return 0;
}

執行結果: 在這裡插入圖片描述