上次看到一个计算1000阶乘的结果中有多少个0的例子,刚开始还以为是计算末尾的呢,结果发现不是,到是发现一种简便的推算阶乘末尾0的算法。下面来看看这种算法的思路。 思路:
要算末尾有多少个0其实就是算5和2相乘的个数,因为每一对5和2相乘的数是10.就会有一个0出现在末尾。这样想,我们就能将任何数的阶乘分开,一个个的数的推算,看看它们能被2和5各除多少次。然后看能被2和5整除的次数,取这两个数中被整除最少的,进行累加,最后,将取到的数相加起来得到的和就是末尾能有多少个0.
步骤:
1.因为是不确定的数,所以先要创建一个键盘接收器
2.然后创建一个没有返回值的函数,接收从键盘上输入的数
3.在函数中定义三个变量,分别存储能被2和5整除的次数和这两个数的和
4.用一个循环输出从1开始到这个数时的每一个整数
5.用循环因为不知道次数所以用while循环判断它能被2和5整除的次数,并取它们中能被整除最少次数的那个数
6.统计结果并输出
代码如下:- import java.util.Scanner;
- public class Test {
- public static void main(String[] args) {
- //封装一个键盘
- Scanner input = new Scanner(System.in);
- //提示能要计算计算阶乘末尾0的个数的数
- System.out.println("请输入要计算阶乘末尾0的个数的数:");
- int num = input.nextInt();
-
- //调用这个方法
- facSum(num);
-
-
- }
- public static void facSum(int number ){
- // 被2整除的次数之和
- int count2 = 0;
- // 被5整除的次数之和
- int count5 = 0;
- // 统计結果得到的和
- int count = 0;
- // 遍历所有的数
- for (int i = 1; i <= number; i++) {
- // 将i赋给一个变量
- int num = i;
- // 统计该数能被2整除多少次,并统计累加结果
- while (num % 2 == 0) {
- count2++;
- num /= 2;
- }
- // 统计该数能被5整除多少次,并统计累加结果
- while (num % 5 == 0) {
- count5++;
- num /= 5;
- }
- }
- // 将得到的数赋给0的计数器
- count = (count2 <= count5) ? count2 : count5;
- // 打印输出阶乘后0的个数
- System.out.println("结尾0的个数为:" + count);
- }
- }
复制代码 新人求给点技术分
|