package miscellaneous;
//Write an algorithm which computes the number of trailing zeros in n factorial
//Trailing 0 will come into number when any number is multiplied by 10.
//So counting number of 10's present in a number will give you number of 0's present in a factorial.
//wait.. if number doesn't contain 10's factor but contains 2's and 5's factor then also 10 will come into picture as
//2*5 = 10, so now if we find out the number of 2 and 5 pairs present in a factor of number will give me number of 0s.
//Now for finding 2 and 5 pair, one thing we can see that any number where 5 factor will be present, it is sure 2 will be present as it will come before then 5.
//Eg: 5! = 5 * 4 * 3 * 2 * 1 = 5 * (2 * 2) * 3 * 2 = So number of 2's present in a number will always be more then 5.
//So instead of finding pair of 5 and 2 it is just fine to check 5 present in a number as 2 will obviously present where 5 is present to make up pair.
//One thing to observe is
//number=20!, so number of 5's in 20 is 20/5 = 4, so there will be 4 zero in 20!.
//number=29!, so number of 5's in 29 is 29/5 = 5.8, so what to do here, it is sure that number of perfect 5 we will require to make 29! is 5 and 0.8 we can discard.
//So, it is not 5 zeros in 29! but is actually 6 0s (8841761993739701954543616000000)
//this situation we need to handle for numbers which itself are full multiple of 5.
//This means that there are 5 multiples of 5 in the number 29 – which is correct because there’s
//5, 10, 15, 20, and 25. But wait, remember that 25 is special because it has 2 factors of 5 (because 5*5 is 25).
//This means that it should count 2 times plus the 4 other factors of 5, which gives us 4+2 = 6.
//factorial of 25 is (15511210043330985984000000),
//so in general, you have to divide the number by 5, to findout how much 5 are present, you have to divide the number by 25 to findout how many 25 are present in a number as it will add extra 5 to number.
//and so on.
public class Trailing0sInFactorial {
public static void main(String[] args) {
int num=0;
System.out.println(getTrailing0InFactorial(num));
}
public static int getTrailing0InFactorial(int num) {
if(num<0)
return -1;
int count = 0;
for (int i = 5; (num/i) > 0; i=i*5) {
count = count + num/i;
}
return count;
}
}
Questions on Stack, Queues, Linkedlist, Binary Trees, Sorting, Searching, Graphs etc with solution using Java Language.
Wednesday, 20 May 2015
Count trailing 0(Zeros) in a Factorial of a number.
Labels:
miscellaneous
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment