求1000!的结果中包含多少个0

转载:http://bbs.itheima.com/thread-109057-1-1.html

BigDecimal和BigInteger两个类看看

具体参考的是原帖7楼的代码

import java.math.BigInteger; 
import java.util.regex.*;  
import java.util.*;  
class Test2{
        
        public static void main(String ars[]){
                Test2 test2 = new Test2();
                test2.jieCheng(1000);
        }
        
        public void jieCheng(int number){
                BigInteger res = new BigInteger("1");  
                
                for (int i = 1; i <= number; i++) {  
                BigInteger num = new BigInteger(String.valueOf(i));  
                res = res.multiply(num); //相当于res * = num;,但是不是基本数据类型,不能使用*运算符
            } 
                String str = res.toString();
                int allZero = allZeroCount(str);
                int lastZro =lastZeroCount(str);
                System.out.println(number+"的阶乘为:"+"\n"+str);
                System.out.println(number+"的阶乘中所有的0的个数:"+allZero);
                System.out.println(number+"的阶乘中末尾的0的个数:"+lastZro);
        }
        
        //求阶乘结果末尾的0的个数
        public int lastZeroCount(String str){
                int count = 0;
                char regex = '0';
                int length = str.length();
                int index = length-1;
                while(str.charAt(index)==regex){
                        count++;
                        index--;
                }
                return count;
        }
        
        //求阶乘结果所有的0的个数
        public int allZeroCount(String str){
                int count = 0;
                String regex = "0";
                Pattern p = Pattern.compile(regex);  
        Matcher m = p.matcher(str);  
        while (m.find())  
        {  
            count++;
        }  
                return count;
        }
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值