/**
- 求出:1000的阶乘所有零和尾部零的个数,不用阶乘。
*/
import java.math.BigInteger;
public class test1000For002 {
public static void main(String[] args){
//错误方案:
//demo01();1000阶乘远大于long的类型范围,行不通。
//正确方案:
//calculateTheNumOfZeroTest01(); 求出这个大数字中所有0的个数
//calculateThelastZeroNum02(); 求出这个大数字中尾部0的个数
}
public static void calculateThelastZeroNum02() {
BigInteger b1 =new BigInteger("1");
for (int i=1 ;i<=1000;i++){
BigInteger b2 = new BigInteger(i+"");
b1 = b1.multiply(b2);
}
String string2 =b1.toString();
StringBuilder sb2 = new StringBuilder(string2);
string2 =sb2.reverse().toString();//链式编程,反转字符串再赋值
int count2=0;
for (int i = 0; i <string2.length() ; i++) {
if('0'==string2.charAt(i)){
count2++;
}
else {
break;
}
}
System.out.println(count2);//249
}
public static void calculateTheNumOfZeroTest01() {
BigInteger b1 =new BigInteger("1");
for (int i=1 ;i<=1000;i++){
BigInteger b2 = new BigInteger(i+"");
b1 = b1.multiply(b2);
}
// System.out.println(b1);
String string =b1.toString();
int count=0;
/* char[] arr =string.toCharArray();*/
for (int i = 0; i <string.length() ; i++) {
if('0' == string.charAt(i)){
count++;
}
}
System.out.println(count);
}
public static void demo01() {
long num =1;
for(long i=1; i <= 1000;i++){
num =i * num;
}
System.out.println(num);
}
}
总结:
①当需求的数的个数超过int和long的类型的最大长度时,即2^32-1这个值时,可以利用java自带的类库BigInterger对数字进行字符串化并且利用类的方法进行求值。
②考虑到求尾数0的个数,当看到求【尾数类】的题目时,要想到String中没有直接倒过来的方法,要把String放入StringBulidedr中,再利用StringBulider的方法对其进行反转,思路就开了。
③链式编程了解一下emmm。