階乘數碼(洛谷P1591題題解,Java語言描述)

題目要求

題目鏈接

在這裏插入圖片描述

分析

沒啥多說的,用BigInteger,要麼就使用高精算法吧(高精是本意)。

推薦使用BigInteger數組存儲每一個階乘的值,避免重複運算,這是一種“記憶化”的思想。

AC代碼(Java語言描述)

import java.math.BigInteger;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        BigInteger[] nums = new BigInteger[1001];
        nums[0] = nums[1] = BigInteger.ONE;
        for (int i = 2; i <= 1000; i++) {
            nums[i] = nums[i-1].multiply(new BigInteger(Integer.toString(i)));
        }
        StringBuilder builder = new StringBuilder();
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        for (int i = 0; i < num; i++) {
            int n = scanner.nextInt(), a = scanner.nextInt();
            int counter = 0;
            for (char c : nums[n].toString().toCharArray()) {
                if (c == (char)('0'+a)) {
                    counter++;
                }
            }
            builder.append(counter).append('\n');
        }
        scanner.close();
        System.out.print(builder);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章