P1134 阶乘问题
题目描述
也许你早就知道阶乘的含义,N阶乘是由1到N相乘而产生,如:
12!= 1 \times 2 \times 3 \times 4 \times 5 \times 6 \times 7 \times 8 \times 9 \times 10 \times 11 \times 12 = 479,001,60012!=1×2×3×4×5×6×7×8×9×10×11×12=479,001,600
1212的阶乘最右边的非零位为66。
写一个程序,计算N(1 \le N \le 50,000,000)N(1≤N≤50,000,000)阶乘的最右边的非零位的值。
注意:10,000,000!10,000,000!有24999992499999个零。
输入输出格式
输入格式:
仅一行包含一个正整数NN。
输出格式:
一个整数,表示最右边的非零位的值。
输入输出样例
输入样例#1: 复制
12
输出样例#1: 复制
6
说明
USACO Training Section 3.2
题解:模拟阶乘,只需保留后面几位数即可,然后最后的时候输出最后一位,如果只考虑最后一位,会对阶乘的最后一位有影响
代码:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
long long int s=1;
int m;
for(int t=1;t<=n;t++)
{
m=t;
m=m%100000000;
s=s%100000000;
s=m*s;
while(s%10==0) s/=10;
// cout<<"m "<<m<<"s "<<s<<endl;
}
cout<<s%10<<endl;
return 0;
}
作者:李斌
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!