POJ 1454 - Factorial Frequencies

http://poj.org/problem?id=1454

概要

\(n!\) を十進表記したときに各数字が何回現れるかを Sample Output のような形式で答える。

制約

解法

やるだけ。

 1 import java.util.*;
 2 import java.math.*;
 3 
 4 public class Main {
 5   public static void main(String[] args) {
 6     Scanner cin = new Scanner(System.in);
 7     for (int N; (N = cin.nextInt()) != 0;) {
 8       int[] ans = solve(N);
 9       System.out.printf("%d! --\n", N);
10       for (int i = 0; i < 2; i++) {
11         for (int j = 0; j < 5; j++) {
12           System.out.printf("   (%d) %4d ", 5*i+j, ans[5*i+j]);
13         }
14         System.out.println("");
15       }
16     }
17   }
18 
19   static int[] solve(int N) {
20     int[] ans = new int[10];
21     BigInteger n = BigInteger.ONE;
22     for (int i = 2; i <= N; i++) {
23       n = n.multiply(BigInteger.valueOf(i));
24     }
25     char[] s = n.toString().toCharArray();
26     for (char c : s) {
27       ++ans[c - '0'];
28     }
29     return ans;
30   }
31 }
poj/1454.java