51Nod 1003 阶乘后面0的数量
来源:互联网 发布:淘宝店如何退货 编辑:程序博客网 时间:2024/06/06 00:52
题目链接
这题第一想到的就是大数,根据前面学的知识,压位相乘,然后求0的个数就行
超时:
#include<iostream>#include<cstdio>#include<math.h>#include<cstring>#include<algorithm>#include<queue>#include<set>#include<vector>using namespace std;const long long mod=100000000;int main(){int n;cin>>n;static long long a[10000000]={0};a[0]=1;int len=1;for(int i=2;i<=n;i++){long long r=0;for(int j=0;j<len;j++){long long fz=a[j]*i+r;a[j]=fz%mod;r=fz/mod;}if(r!=0) a[len++]=r;}int sum=0;for(int i=0;i<len;i++){long long num=a[i];if(num==0) sum+=8;elsewhile(num){int fz=num%10;num/=10;if(fz==0) sum++;else{cout<<sum<<endl;return 0;}}} return 0;}
然后看了相关讨论,里面讲到只有2和5遇到才会产生0(或者2的倍数和5的倍数)
然是2的个数比5的多,所以只需要计算n中包含多少个5就行
例如100
100/5=20.。20/5=4.。4/5=0 所以100!有24个0
不就是求5的个数嘛?为什么还要无线除5呢?100/5不就是5的个数了嘛?
其实不是的,我最初就有这个疑惑。
无限的除以5是因为100/5=20.在20里面每5个数还有5的倍数,即在100里面每25个数也有一个5的倍数
例如25=5*5.如果单纯的用100/5,至少这个是少计算一次
#include<iostream>#include<cstdio>#include<math.h>#include<cstring>#include<algorithm>#include<queue>#include<set>#include<vector>using namespace std;const long long mod=1e15;int main(){int n;cin>>n;int sum=0;while(n){sum+=n/5;n/=5;}cout<<sum;return 0;}
阅读全文
1 0
- 51-nod 1003 . 阶乘后面0的数量
- 51nod 1003 阶乘后面0的数量
- 51nod 1003阶乘后面0的数量
- 51nod-1003 阶乘后面0的数量
- 51Nod 1003 阶乘后面0的数量
- 51nod 1003 阶乘后面0的数量
- 51nod-【1003 阶乘后面0的数量】
- 51nod 1003 阶乘后面0的数量
- 51nod-1003 阶乘后面0的数量
- 51nod 1003 阶乘后面0的数量
- 51nod 1003 阶乘后面0的数量
- 51nod 1003 阶乘后面0的数量
- 51NOD 1003 阶乘后面0的数量
- [51NOD] 1003 阶乘后面0的数量 [数学]
- 1003 阶乘后面0的数量 51NOD
- 51nod 1003 阶乘后面0的数量
- 51nod 1003 阶乘后面0的数量【数学】
- 51Nod 1003 阶乘后面0的数量
- 淘宝的放大镜的实现
- 使js构造函数不会被当做普通函数调用的技巧
- Maven使用注解联合查询
- LintCode-两数之和
- Linux命令
- 51Nod 1003 阶乘后面0的数量
- 表空间管理
- Codeforces 853D 贪心
- MongoDB实战-分片集群的管理
- 第六课 Tensorflow Cifar10 CNN 卷积神经网络
- 次短路(hdu 6181)
- 生活小记7
- 互斥锁 自旋锁 读写锁的区别
- mybatis开发模式