我正在尝试计算由阶乘产生的数字的尾随零(这意味着数字变得非常大)。以下代码采用一个数字,计算该数字的阶乘,并计算尾随零。然而,当数量大约为25!
, numZeros 不起作用。
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
double fact;
int answer;
try {
int number = Integer.parseInt(br.readLine());
fact = factorial(number);
answer = numZeros(fact);
}
catch (NumberFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static double factorial (int num) {
double total = 1;
for (int i = 1; i <= num; i++) {
total *= i;
}
return total;
}
public static int numZeros (double num) {
int count = 0;
int last = 0;
while (last == 0) {
last = (int) (num % 10);
num = num / 10;
count++;
}
return count-1;
}
我并不担心这段代码的效率,而且我知道有多种方法可以使这段代码的效率更好。我想要弄清楚的是为什么计算大于的数字的尾随零25!
不管用。
有任何想法吗?
您的任务不是计算阶乘,而是计算零的数量。一个好的解决方案使用以下公式http://en.wikipedia.org/wiki/Trailing_zeros http://en.wikipedia.org/wiki/Trailing_zeros(你可以尝试证明)
def zeroes(n):
i = 1
result = 0
while n >= i:
i *= 5
result += n/i # (taking floor, just like Python or Java does)
return result
希望你能把这个翻译成Java。这只是计算 [n / 5] + [n / 25] + [n / 125] + [n / 625] + ... 并在除数大于 n 时停止。
不要使用大整数。这是一个 bozosort。对于大量数据,此类解决方案需要数秒的时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)