POJ 3331 - The Idiot of the Year Contest!

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

概要

日にち day と0から9までの数字 digit が与えられるので,day の階乗に出現する digit の数を答える.

制約

解法

Java の BigInteger で実際に階乗を計算して数えるだけ.

 1 import java.io.*;
 2 import java.util.*;
 3 import java.math.*;
 4 
 5 public class Main {
 6   public static void main(String[] args) {
 7     Scanner cin = new Scanner(System.in);
 8     int T = cin.nextInt();
 9     while (T-- > 0) {
10       final int year = cin.nextInt();
11       final int digit = cin.nextInt();
12 
13       final String f = fact(year).toString();
14       int ans = 0;
15       for (int i = 0; i < f.length(); i++) {
16         if (f.charAt(i) == '0'+digit) {
17           ++ans;
18         }
19       }
20       System.out.println(ans);
21     }
22   }
23 
24   public static BigInteger fact(int x) {
25     BigInteger r = BigInteger.ONE;
26     for (int i = 1; i <= x; i++) {
27       r = r.multiply(new BigInteger(Integer.toString(i)));
28     }
29     return r;
30   }
31 }
poj/3331.java