Factorial Trailing Zeroes
Given an integer
n
, return the number of trailing zeroes in
n
!
Note:
Your solution should be in logarithmic time complexity.
该题的意思是求n!尾部有多少个0。
分析:1*2*...*n,
n!只有5的倍数才贡献尾部0,也即 5,10,15,20,25,...
因此有n/5个5的倍数的个数,然而25=5*5,125=5*5*5等其实贡献了两个0或3个0...
因此程序代码如下:
/**
*
*/
package Factorial_Trailing_Zeroes1;
import java.util.Scanner;
public class Factorial_Trailing_Zeroes {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
int n = input.nextInt();
System.out.println(trailingZeroes(n));
}
public static int trailingZeroes(int n) {
int count = 0;
int temp = 5;
while(temp <= n){
count = count + n/temp;
temp = temp * 5;
}
return count;
}
}
*
*/
package Factorial_Trailing_Zeroes1;
import java.util.Scanner;
public class Factorial_Trailing_Zeroes {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
int n = input.nextInt();
System.out.println(trailingZeroes(n));
}
public static int trailingZeroes(int n) {
int count = 0;
int temp = 5;
while(temp <= n){
count = count + n/temp;
temp = temp * 5;
}
return count;
}
}
算法复杂度 :log5 (n)