Counting trailing zeros of numbers resulted from factorial

后端 未结 10 1584
北荒
北荒 2020-11-30 07:48

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

10条回答
  •  有刺的猬
    2020-11-30 08:31

    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));
        }
    }
    

提交回复
热议问题