推荐给好友 上一篇 | 下一篇

10000!的最后一个非0位是几?

10000!的最后一个非0位是几?

 

来自CSDN的解答

对于这问题,我想算到1000000都问题,绝对能在一秒中出结果.大致算法如下:  
            1,算出1--N该阶乘值中含5因子的指数F.那N=10来说,显然10的阶乘中含5因子的指数为2.对于任意值,算其含5因子的指数的算法很简单.可用下面的代码.  
            int   Five(int   N)  
        {  
              int   sum=0;    
              int   temp=5;  
              while(temp<=N)  
              {  
                  sum+=N/temp;  
                  temp*=5;  
                }  
               
              return   sum;  
  }  
         
      2.用同样的算法算出该阶乘含2因子的指数T.  
      3.用下面的代码,算出最后的结果.  
          代码1:  
          //对数据进行处理.//  
          int   Process(int   n)  
          {  
              while(n%2==0)   n/=2;  
              while(n%5==0)   n/=5;  
   
              return   n;  
            }  
             
            代码2:  
          //算出最后所需要的结果,//  
          int   Result(int   N)  
          {  
              int   result=1;  
              for(int   i=2;i<=N;i++)  
            {  
                  result=result*Process(i);  
                  result%=10;  
              }  
              int   temp=T-F;//F,T的含义如上面所诉.  
              if(temp==0)   return   result;  
              temp%=4;  
              if(temp==0)   return   (result*6%10);  
              if(temp==1)   return   (result*2%10);  
              if(temp==2)   return   (result*4%10);  
              if(temp==3)   return   (result*8%10);  
   
          }  
           
          对于这道题,很容易让人犯一个错误,如半桶水,他就犯了这样的错误.他给出的算法是错误的.用一个稍大点的数,就会出错.如25,125这类的数.这其实是一道数学题,没啥可多说的了.


 

评分:0

我来说两句