微衆銀行秋招Java筆記試験第一題---階乗結果の最後の0ではない数


昨日の午後、微衆銀行のJava開発オンラインペンの試験問題をしました.
第1題の与える問題は1つの数を与えることを意味して、この数の階乗の結果の最後の1つの0でない数を求めていくらです
例:
10の乗算が3628800である場合、乗算結果の最後の0でない数は8である.
コードは次のとおりです.
import java.math.BigDecimal;
import java.util.Scanner;

/**
 * Created by wsw on 2019/9/19 16:32
 *            0  
 */
public class Main1 {
    //   1: BigDecimal
    public static void run(int num){
        BigDecimal big = new BigDecimal(1);
        for (int i = 1; i <= num; i++) {
            big = big.multiply(new BigDecimal(i));
        }
        String str = big.toString();
        System.out.println(str);
        for (int i = str.length()-1; i >= 0 ; i--) {
            if (str.charAt(i) != '0'){
                System.out.println(str.charAt(i));
                break;
            }
        }
    }

    //   2:       ,       0     0  
    public static void run1(int num){
        long sum = 1;
        for (long i = 1; i <= num; i++) {
            sum *= i;
            while (0 == (sum % 10)){
                sum /= 10;
            }
            if (sum > 100000000){
                sum %= 100000000;
            }
        }
        if (sum == 0)
            sum = 0;
        System.out.println(sum % 10);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        run(num);
        //run1(num);
        scanner.close();
    }
}


実行結果:
10
3628800
8