您的位置:首页 > 其它

Moderate 阶层的结尾0个数 @CareerCup

2013-12-02 07:30 239 查看
思路和《经典面试题:100的阶乘有几个结尾零》是一样的,但代码更简洁了,尤其是第二种方法!

package Moderate;

/**
* Write an algorithm which computes the number of trailing zeros in n
* factorial.
*
* 译文:
*
* 写一个算法计算n的阶乘末尾0的个数。
*
*/
public class S17_3 {

public static int factorsOf5(int i) {
int count = 0;
while (i % 5 == 0) {
count++;
i /= 5;
}
return count;
}

// 第一种方法就是对阶层的所有因子都计算有几个5因子
public static int countFactZeros(int num) {
int count = 0;
for (int i = 2; i <= num; i++) {
count += factorsOf5(i);
}
return count;
}

// 第二种方法,更快地计算出总数
public static int countFactZeros2(int num) {
int count = 0;
if (num < 0) {
System.out.println("Factorial is not defined for negative numbers");
return 0;
}
while(num > 0){
count += num / 5;
num /= 5;
}
return count;
}

public static int factorial(int num) {
if (num == 1) {
return 1;
} else if (num > 1) {
return num * factorial(num - 1);
} else {
return -1; // Error
}
}

public static void main(String[] args) {
for (int i = 1; i < 12; i++) {
System.out.println(i + "! (or " + factorial(i) + ") has " + countFactZeros(i) + " zeros");
System.out.println(i + "! (or " + factorial(i) + ") has " + countFactZeros2(i) + " zeros");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: