I\'m trying to count trailing zeros of numbers that are resulted from factorials (meaning that the numbers get quite large). Following code takes a number, compute the facto
My 2 cents: avoid to work with double since they are error-prone. A better datatype in this case is BigInteger, and here there is a small method that will help you:
public class CountTrailingZeroes {
public int countTrailingZeroes(double number) {
return countTrailingZeroes(String.format("%.0f", number));
}
public int countTrailingZeroes(String number) {
int c = 0;
int i = number.length() - 1;
while (number.charAt(i) == '0') {
i--;
c++;
}
return c;
}
@Test
public void $128() {
assertEquals(0, countTrailingZeroes("128"));
}
@Test
public void $120() {
assertEquals(1, countTrailingZeroes("120"));
}
@Test
public void $1200() {
assertEquals(2, countTrailingZeroes("1200"));
}
@Test
public void $12000() {
assertEquals(3, countTrailingZeroes("12000"));
}
@Test
public void $120000() {
assertEquals(4, countTrailingZeroes("120000"));
}
@Test
public void $102350000() {
assertEquals(4, countTrailingZeroes("102350000"));
}
@Test
public void $1023500000() {
assertEquals(5, countTrailingZeroes(1023500000.0));
}
}