微众银行秋招Java笔试第一题---阶乘结果的最后一个不为0的数

昨天下午做了微众银行的Java开发在线笔试题,编程题一共三道,记录一下解答思路

第一题给的题目意思是给定一个数,求这个数阶乘结果的最后一个不为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

你可能感兴趣的:(秋招题解,java,数据结构,微众银行,笔试,Java,阶乘)