#UVa:568-Just the Facts

循序從1~10000一直乘上去,由於最大值是到10000,因此每次計算完留下結尾非零的五位數再去做乘法,即可得到正確的最後一位非零數字。

C++(0.022)

/*******************************************************/
/* UVa 568 Just the Facts                              */
/* Author: LanyiKnight [at] knightzone.org             */
/* Version: 2015/01/14                                 */
/*******************************************************/
#include <iostream>
#include <cstdio>
using namespace std;

int main(){
  int dp[10005] = {1, 1, 2, 6, 24};
  for( int i = 5 ; i <= 10000 ; ++i ){
    dp[i] = dp[i-1] * i;

    while(dp[i] % 10 == 0){
      dp[i] /= 10;
    }
    dp[i] %= 100000;
  }

  int N;
  while( scanf("%d", &N) != EOF ){
    printf("%5d -> %d\n", N, dp[N] % 10);
  }
  return 0;
}

發表迴響