P1134 [USACO3.2]阶乘问题

也许你早就知道阶乘的含义,N阶乘是由1到N相乘而产生,如:

12!= =1×2×3×4×5×6×7×8×9×10×11×12=479,001,600

1212的阶乘最右边的非零位为66。

写一个程序,计算N(1≤N≤50,000,000)阶乘的最右边的非零位的值。

注意:10,000,000!10,000,000!有24999992499999个零。

 

--

最初想法是保留一位,后来发现乘出0时这位没了,

然后觉得保留两位,后来发现它又没了,

不知道保留多少位,一看题解

%1000000

?

okok it's right;

我知道可以暴力但我没想到这么暴力,当场一个卧槽+抓头发。

正解是找规律but..这个mod真的很香

#include<bits/stdc++.h>
using namespace std;
int main()
{
    long long ans=1;
    long long n;
    cin>>n;
    for(int i=1;i<=n;i++)
     {   
          ans*=i;
          
          while(ans%10==0) ans/=10;
          
          ans%=1000000;
     }
     while(ans%10==0) ans/=10;
     printf("%d",ans%10);
}

 

上一篇:Java数值使用下划线


下一篇:Java之JVM调优案例分析与实战(2) - 集群间同步导致的内存溢出