Loading

求1000的阶乘尾部0的个数

要求1000的阶乘尾部0的个数,如果想先求出1000的阶乘,肯定超过了基本数据类型的取值范围,此时就需要通过其他途径来解决问题。

1、BigInteger

BigInteger可以接收很大的整数,所以完全可以接收1000的阶乘的结果。

public static void main(String[] args) {
        BigInteger bi = new BigInteger("1");
        for(int i = 1; i <= 1000; ++i){
            bi = bi.multiply(new BigInteger(i + ""));
        }
        String str = bi.toString();
        int count = 0;
        for(int i = str.length()-1; i >= 0; --i){
            if(str.charAt(i) != '0')
                break;
            count++;
        }
        System.out.println(count);

    }

2、用递归的方法计算

首先,一个数要想在相乘的时候产生0,必须要是5的倍数,这样在相乘的时候产生至少一个0,这样的数有1000/5=200个,在这两百个数中,有些数是25的倍数,这些数与其他数相乘的时候可以产生两个0,这些书共有200/5=40个,而在这40个数中,有一些数是125的倍数,这些数可以产生3个0,有40/5=8个,一次类推,这样就得到了递推公式:

public static void main(String[] args) {
        System.out.println(fun(1000));
    }
    public static int fun(int n){
        if(n > 0 && n < 5)
            return 0;
        else
            return n/5 + fun(n/5);
    }
posted @ 2017-02-26 19:49  leon_x  阅读(138)  评论(0)    收藏  举报