题目:问题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);
}
}