Показывает конкретную цифру вывода // удаление 0 из bigInteger

Как я мог показать только конкретную цифру вывода? Как я могу удалить 0 из bigInteger?

Мой пример:

Имея задачу показать последнее число факториала числа, которое не равно 0.

Example:
1! = 1
2! = 2
3! = 6
4! = 4
5! = 2
6! = 2

Сейчас он просто показывает факториал.

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

public class Main{
    // Returns Factorial of N
    static BigInteger factorial(int N){
        // Initialize result
        BigInteger f = new BigInteger("1"); // Or BigInteger.ONE

        // Multiply f with 2, 3, ...N
        for (int i = 2; i <= N; i++)
            f = f.multiply(BigInteger.valueOf(i));

        return f;
    }

    // Driver method
    public static void main(String args[]) throws Exception
    {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        System.out.println(factorial(n));
    }
}

Пример vol2 --> Здесь мне нужно решение для удаления 0 из biginteger:

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

public class Main{
    // Returns Factorial of N
    static BigInteger factorial(int N){
        // Initialize result
        BigInteger f = new BigInteger("1"); // Or BigInteger.ONE

        // Multiply f with 2, 3, ...N
        for (int i = 2; i <= N; i++)
            f = f.multiply(BigInteger.valueOf(i));

        return f;
    }

    // Driver method
    public static void main(String args[]) throws Exception
    {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        BigInteger a = (factorial(n));
        BigInteger b, c;
        c = new BigInteger("10");
        b = a.mod(c);
        System.out.println(b);
        System.out.println(a);
    }
}

Есть ли простой способ удалить все 0 из числа? Это был бы самый простой способ решить мою проблему


person waynekenoff    schedule 11.02.2018    source источник
comment
Вместо того, чтобы вычислять факториал BigInteger и затем отбрасывать большую часть цифр, вы можете реализовать специальное умножение, которое сохраняет только младшую значащую ненулевую цифру на каждом шаге вычисления факториала, применяя арифметику по модулю.   -  person Ralf Kleberhoff    schedule 11.02.2018


Ответы (1)


Вы можете просто преобразовать свой номер в строку и удалить нули. Затем вы кладете его обратно в BigInteger:

public static BigInteger removeZeroes(int i) {
    return new BigInteger(String.valueOf(i).replace("0", ""));
}
person Christian    schedule 11.02.2018
comment
Решил! Благодарю вас! - person waynekenoff; 11.02.2018
comment
Должно быть String str = String.valueOf(i).replace("0", ""); BigInteger bigInteger = new BigInteger(str.substring(str.length() - 1)); - person miskender; 11.02.2018