不要被阶乘吓倒

题目:问题1:‍给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3 628 800,N!的末尾有两个0。

         问题2:求N!的二进制表示中最低位1的位置

思路:一、求N的阶乘中末尾0的个数:1、判断N余5是否为零,若为0则sumTen(N!末尾0的个数)加1;2、从1到N,循环执行步骤1。一个整数的阶乘,被5整除的个数小于被2整除的个数,所以判断此整数的阶乘被5整除的个数,即可得到末尾0的个数。


        二、求N的阶乘中二进制中最低位1的位置:1、判断N余2是否为零,若为0则sumTwo(N!二进制中最低位1的位置)加1;2、从1到N,循环执行步骤1。一个整数中被2整除的个数,即为最低位1的位置。整数的阶乘,即可判断此整数阶乘中被2整除的个数和,即为最低位1的位置。

 

代码:

import java.util.Scanner;

public class Test 
{
     public static void main(String args[])
     {
      Scanner in = new Scanner(System.in);
      System.out.print("请输入需要求阶乘的数字:");
      int N = in.nextInt();
      int n = N;
      int sumTen = 0;
      int sumTwo = 0;
      for(int i=1; i<=n; i++)
      {
       int k = i;     
       while(k%5 == 0)//整数i中可以被5整除的个数
          {
           sumTen = sumTen + 1;
           k = k/5;
          } 
       int j = i;
       while(j%2 == 0)//整数i中可以被2整除的个数
       {
        sumTwo = sumTwo + 1;
        j = j/2;
       }
      }
      System.out.println(N+"!的末尾有:"+sumTen+"个零");
      System.out.println(N+"!的二进制表示中最低位1的位置:"+sumTwo);
     }
}


 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值