POJ 3331 - The Idiot of the Year Contest!
http://poj.org/problem?id=3331
概要
日にち day と0から9までの数字 digit が与えられるので,day の階乗に出現する digit の数を答える.
制約
- 0 <= digit <= 9
- 明示的に書いてないけど「the day of the year」なのでたぶん 0 <= day <= 366
解法
Java の BigInteger で実際に階乗を計算して数えるだけ.
poj/3331.java1 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 }