java - 在 N 中找到第一个非零数!在 java

标签 java string math biginteger

如何找到 N 的阶乘的第一个非零数。N 的范围可以从 1 到 2147483647。输出返回一个整数。

例如:

findFirstNoneZeroNumberOfTheFactorial(4) = 4; // because 4! = 24
findFirstNoneZeroNumberOfTheFactorial(5) = 2; // because 5! = 120

这是我的代码:

import java.math.BigInteger;

public class Solution {
    public static int findFirstNoneZeroNumberOfTheFactorial(int n) {
        BigInteger fact = null;
        for (int i = 1; i <= n; i++) {
            fact = fact.multiply(BigInteger.valueOf(i));
        }
        String sFact = String.valueOf(fact);
        for (int i = sFact.length() - 1; i >= 0; i--) {
            if (sFact.charAt(i) != '0') {
                int result = Character.getNumericValue(sFact.charAt(i));
                return result;
            }
        }
        return 0;
    }
    public static void main(String[] args){
        System.out.println(Solution.findFirstNoneZeroNumberOfTheFactorial(4));
    }
}

但是它不起作用!!

最佳答案

你的初始化不正确。

BigInteger fact = BigInteger.ONE;

This is not optimal. If you just need the single last non-zero digit just keep track only the last non zero digit not the whole multiplied number.

let's do some math
x     x!      last-nonzero-digit(x * last-nonzero-digit)
1     1             1*1        => 1
2     2             2*1 = 2    => 2
3     6             3*2 = 6    => 6 
4     24            6*4 = 2(4) => 4
5     120           4*5 = (2)0 => 2 
6     720           2*6 = 1(2) => 2
7     5040          2*7 = 1(4) => 4

为什么我必须计算整个乘法?

只保留最后一个非零数字。

关于java - 在 N 中找到第一个非零数!在 java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31135434/

相关文章:

java - try-with-resources 具有多个资源和 else 语句的 JDBC

java - 是什么导致数组越界错误以及如何清理我的代码?

java - 将字符串保存到文件

iOS 将极坐标定义的区域转换为 NxN 矩阵

Java LocalDateTime与mybatis的转换

java - 如何证明一个对象是否是imageview?

javascript - 字符串在 JavaScript 中如何工作?

c - 如果包含另一个句子字符串,则从中删除该单词字符串

java - 从另一个号码获取不太具体的号码

bash - 在 bash 中使用 bc 的力量