健康)状况 :
编写一个程序,计算给定数字的阶乘中尾随零的数量。
N!= 1 * 2 * 3 * ... * N
小心1000!有2568位...
有关详细信息,请参阅: http: //mathworld.wolfram.com/Factorial.html
例子
zeros(6) = 1
6! = 1 * 2 * 3 * 4 * 5 * 6 = 720 --> 1 trailing zero
zeros(12) = 2
12! = 479001600 --> 2 trailing zeros
提示:你不是要计算阶乘。找到另一种方法来查找零的数量。
正如我们在最后一行中看到的,不需要计算阶乘。但为了理解这张照片,我决定这样做。
public static int zeros(int n) {
BigInteger x = BigInteger.ONE;
BigInteger temp = BigInteger.ONE;
while (!x.toString().equals(String.valueOf(n)))
{
temp = temp.multiply(x);
x = x.add(BigInteger.ONE);
}
System.out.println(temp);
String tempStr = String.valueOf(temp);
int countZero = 0;
for(int i = 0 ; i < tempStr.length() ; i ++){
countZero = tempStr.charAt(i)=='0' ? countZero+1 : 0;
}
return countZero;
}
我们尝试 N = 1000;
结果:246。在我看来,解决方案是正确的(按条件),但答案是错误的。应该是249。我开始挖了。
偶然发现了这个
https://www.geeksforgeeks.org/count-trailing-zeroes-factorial-number/
好吧,下面是解决方案:
static int findTrailingZeros(int n)
{
// Initialize result
int count = 0;
// Keep dividing n by powers
// of 5 and update count
for (int i = 5; n / i >= 1; i *= 5)
count += n / i;
return count;
}
请帮我弄清楚为什么我的代码不正确,以及解决问题的解释中写了什么?
阶乘计算
你也有计算零的问题,因为你需要从字符串的末尾开始计数。
而且您很感兴趣..如果您只在最后需要它们,为什么中心需要零。或者,零的数量也取决于用于获得 k 的十位的数量!或 k,数字 5。此外,在诸如 (25!) 之类的数字上;(100)!(50!)(225)!(125!)175!此外,您需要在最后添加额外的零,更多,但您仍然可以检查它。就是这样