NSOJ 阶乘的0
来源:互联网 发布:windows 无法完成安装 编辑:程序博客网 时间:2024/05/02 04:44
阶乘的0
时间限制: 3000ms
内存限制: 128000KB
64位整型: Java 类名:上一题
提交 运行结果 统计 讨论版
下一题题目描述
计算n!的十进制表示最后有多少个0
输入
第一行输入一个整数N表示测试数据的组数(1<=N<=100)
每组测试数据占一行,都只有一个整数M(0<=M<=10000000)
每组测试数据占一行,都只有一个整数M(0<=M<=10000000)
输出
输出M的阶乘的十进制表示中最后0的个数
比如5!=120则最后的0的个数为1
比如5!=120则最后的0的个数为1
样例输入
63601001024234568735373
样例输出
0142425358612183837
来源
NYOJ
思路:只有是乘以5的倍数的数,才可能在结尾处有零的。只要是偶数相乘就可以,不需要考虑偶数的个数,所以只要计算5的个数就可以了,因此把每个数分解因子,统计5的因子个数。
#include<stdio.h>int main(){ int t; scanf("%d",&t); while(t--) { int k, n,m=0,i; scanf("%d",&n); for(i=5;i<=n;i+=5) { k=i; while(k%5==0) { m++; k=k/5; } } printf("%d\n",m); } return 0 ;}
上面的那个算法在51nod上超时,在上面的基础上,奉上一个改进的代码,也很好理解。
#include <stdio.h>#include <string.h>#include <math.h>#define maxn 1000000000int k,n;int main(){ int n; scanf("%d",&n); long long int i,cont=0,j; for( i=5,j=1;i<=n;i+=5,j++) { if(j%5==0) { int term=j; while(term%5==0) { term=term/5; cont++; } } } cont+=j-1; printf("%d\n",cont); return 0;}
1 0
- NSOJ 阶乘的0
- NSOJ 大数阶乘
- NSOJ 国王的魔镜
- 生活的烦恼 nsoj
- NSOJ
- nsoj 5696 最大的数
- NSOJ D的小L
- 阶乘末尾的0
- 阶乘的0
- NYOJ - 阶乘的0
- 阶乘0的个数
- 84 阶乘的0
- NYIST 阶乘的0
- nyoj84 阶乘的0
- 阶乘的0
- 阶乘的0
- 阶乘尾部的0
- nyoj84阶乘的0
- 学习小结
- android底层源码开启全部日志
- 浅谈内部类-Inner class
- HTML滚动文字
- 201609-4 交通规划
- NSOJ 阶乘的0
- Codeforces 479E Riding in a Lift【Dp+前缀和优化+二分】好题~
- 串口实验
- hadoop处理lzo格式的压缩文件报错
- angular-基础语法结构
- BigInteger的初步使用。
- unit10~~selinux 的管理
- AngularJS快速入门
- 测试markdown数学公式