java实现统计N!尾部连续0的个数

论坛 期权论坛 脚本     
匿名网站用户   2020-12-20 00:04   24   0

问题描述:

对任意输入的正整数N,编写java程序求N!的尾部连续0的个数,并指出计算复杂度。如:18!=6402373705728000,尾部连续0的个数是3

(不用考虑数值超出计算机整数界限的问题)


java代码如下:

import java.util.ArrayList;

public class Zero {

 /**
  * 求n!结果数末尾连续0的个数
  * 
  * 思路,从1到n找出依次找出相乘为10的整数倍的数,不重复
  * 
  * 
  * 
  */
 
 public int countZero(int num){
  ArrayList list=new ArrayList();
  
  int count=0;
  for(int i=1;i<=num;i++){//将num前的所有大于0的正整数全部放入list中
             list.add(i);                  
  }
  
  for(int j=0;j<list.size()-1;j++){//从list第一个正整数开始寻找如果找到了与本数相乘是10的倍数的就将这两个数从list中移除,并进入下一次循环,统计本次相乘后出现的0的个数
      int k=j+1;
   while(k<list.size()){
    int m=(Integer) list.get(k);
    int n=(Integer)list.get(j);
    int total=m*n;
    if(total%10==0){
     //统计0的个数
     while(total%10==0){
      total=total/10;
      count++;
     }
     
     //移除本次相乘为10的倍数的两个数
     list.remove(k);
     list.remove(j);
     
     break;//跳出while循环,每次只找到开始的数与后面的数相乘为10的倍数的第一个数就行
    }
    
    k++;
    
   }
  }
  
  return count;
 }
 
 
 
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Zero zero=new Zero();
  int n=18;
  int count=zero.countZero(n);
  int total=1;
//  for(int i=1;i<=n;i++){
//   total=total*i;
//  }
  System.out.println("统计的0的个数为:"+count);
//  System.out.println("该数的阶乘为:"+total);

 }

}

在main函数中将变量n设置为你传入的参数就可以统计出该参数阶乘后的末尾0的个数~~~




分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP