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");
}
}
}
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");
}
}
}
相关文章推荐
- Moderate 判断井字游戏的胜利 @CareerCup
- Moderate 不用比较符返回较大的数 @CareerCup
- Moderate 猜测序列hit或是pseudo-hit @CareerCup
- Moderate 找最小排序区间 @CareerCup
- Moderate 整数打印读法 @CareerCup
- Moderate 最大连续序列之和 @CareerCup
- Moderate 查单词 @CareerCup
- Moderate 加入空格使得可辨别单词数量最多 @CareerCup
- Moderate 找到数组中和为定值的整数对 @CareerCup
- CareerCup-1.7
- Recursion 叠箱子最高问题 @CareerCup
- Hard 找到由其它单词组成的最长单词 @CareerCup
- CareerCup Find the no. of expressions that evaluate to a Walprime
- CareerCup Cost of cutting wood
- Stack_Queue 把栈排序 Sort a stack @CareerCup
- CareerCup Cryptarithmetic Puzzle DFS
- CareerCup Given preorder traversal array of a BST, recontruct the BST.
- CareerCup Insert 0s to maximize A*B
- Careercup - Facebook面试题 - 6204973461274624
- CareerCup chapter 5 Bit Manipulation