蓝桥杯 试题 算法训练 阶乘(java)

n ! 表示为n的阶乘,其中阶乘的定义是这样的:

  若n为0,则有n ! = 0 ! = 1

  若n为正整数,则有n ! = (n-1)! * n

  例如4 ! = 4 * 3 * 2 * 1 = 24


  可以发现阶乘这一运算的数值增长速度是非常快的,比如20!=

  2432902008176640000 ,这个时候已经数字的长度已经达到了19位。幸好,现在我们的

  任务不是计算出n的阶乘,而是只要计算出n!末尾0的个数就可以了。

输入格式

  输入数据只会包含一个整数n

输出格式

  输出中包含一个整数m,表示n!末尾0的个数

输入输出样例1

  --------------------Input--------------------

  4

  --------------------Output--------------------

  0

输入输出样例2

  --------------------Input--------------------

  20

  --------------------Output--------------------

  4

数据规模和约定

  对于10%的数据,保证有n<=10

  对于80%的数据,保证有n<=100000

  对于100%的数据,保证有n<=10^9

阶乘数据较大,用BigInteger构造器来处理,乘法用multiply()这个函数。得到数据后转为字符串,便于处理判断,倒序遍历查找0的个数即可,具体看代码。

public class AL_636 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        BigInteger ans=BigInteger.ONE;//初始值,值为1
        for (int i = 1; i <=n ; i++) {
            ans=ans.multiply(BigInteger.valueOf(i));
        }                    //将i转为BigInteger型
        String a=String.valueOf(ans);//ans转为字符串
        //String a=ans+"";也是一样的
        int j=a.length()-1,sum=0;
        while (a.charAt(j)=='0'){//倒序判断0的个数
            sum++;
            j--;
        }
        System.out.println(sum);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值