专栏文章
题解:B4268 [朝阳区小学组 2019] nonzero
B4268题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @miptlxf5
- 此快照首次捕获于
- 2025/12/03 17:44 3 个月前
- 此快照最后确认于
- 2025/12/03 17:44 3 个月前
Problem
求出 的最后面的非零位是多少。
Solution
首先如何将 的最后一位算出?
推论:对于加法、乘法、乘方运算,算好后取余和边算边取余是等价的。
证明:以加法为例:将 分解成 。则原式:乘法也是类似。
随后就是将 的零位去除,可以不断将 如果是 则去除它,也就是 。
如果你按上面的步骤并且开
unsigned long long,你只能得 分。这时你需要设一个值最好是 的次方,不断将 这个值,可以减少复杂度。这里我使用 。Code
复杂度:。
CPP#include<bits/stdc++.h>
using namespace std;
unsigned long long n,sum=1;
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
sum*=i;
while(sum%10==0){
sum/=10;
}
sum%=10000;
}
cout<<sum%10<<endl;
return 0;
}
/*
*/
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...