第一种方法:
算出1000!中所有0的个数:
/**
*求1000!中所有的0
*/
private static void demo1() {
BigInteger bi1 = new BigInteger("1");
for (int i = 1; i <= 1000; i++) {
BigInteger bi2 = new BigInteger(i + "");
bi1 = bi1.multiply(bi2);
}
//System.out.println(bi1);
String str = bi1.toString(); //获取字符串表现形式
int count = 0;
for (int i = 0; i < str.length(); i++) {
//通过索引获取每一个字符
if('0' == str.charAt(i)) { //如果字符串中出现了0字符
count++; //计数器+1
}
}
System.out.println(count);
}
算出1000!中尾部0的个数:
用reverse将1000!的得数反转
public static void main(String[] args) { //demo1(); /** *获取1000!尾部的0的个数 */ BigInteger bi1 = new BigInteger("1"); for (int i = 1; i <= 1000; i++) { BigInteger bi2 = new BigInteger(i + ""); bi1 = bi1.multiply(bi2); } //System.out.println(bi1); String str = bi1.toString(); //获取字符串表现形式 StringBuilder sb = new StringBuilder(str); str = sb.reverse().toString(); int count = 0; for (int i = 0; i < str.length(); i++) { if('0' != str.charAt(i)) { //遇到第一个不是0的字符时 break; //跳出循环 }else { count ++; } } System.out.println(count);
第二种方法: 递归
/** *用递归求1000!尾部0的个数 * * 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100...1000 1000/5 = 200 * 5*5*1 5*5*2 5*5*3 5*5*4 5*5*5 5*5*6 5*5*7 5*5*8 5*5*9... 200/5 = 8 * 5*5*5*1 5*5*5*2 5*5*5*3 5*5*5*4 5*5*5*5 5*5*5*6 5*5*5*7 5*5*5*8 8/5 = 1 * 5*5*5*5 */ public static void main(String[] args) { System.out.println(fun(1000)); } public static int fun(int num) { if(num > 0 && num < 5) { return 0; }else { return num / 5 + fun(num / 5); } }