微衆銀行秋招Java筆記試験第一題---階乗結果の最後の0ではない数
昨日の午後、微衆銀行のJava開発オンラインペンの試験問題をしました.
第1題の与える問題は1つの数を与えることを意味して、この数の階乗の結果の最後の1つの0でない数を求めていくらです
例:
10の乗算が3628800である場合、乗算結果の最後の0でない数は8である.
コードは次のとおりです.
実行結果:
第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