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

浙公网安备 33010602011771号