HDU1124 一个数的阶乘的结果中包含 几个 0
2017-11-29 16:02
281 查看
分析:
输入整数 N,输出整数 N! 中,十进制表示情况下, 末尾 0 的个数。因为 2*5=10 。所以N! 表达式中,考虑 2,5 的公共次数 就可以。
又因为 2的数目太多,所以公共次数 取决于 5的个数。
所以问题就转化为 N! 表达式中,能够分解出来的 5 的个数。
方法一:直接进行简单的暴力进行求解
#include <cstdio> //G++ 暴力简单模拟,超时。int main()
{
int value;
int T;
scanf("%d",&T);
while(T--){
scanf("%d",&value);
if(value<=4)
printf("0\n");
else{
int num = 0;
int tmp = 1;
for(int i=5;i<=value;i++){ //当 N=1e9 的时候,明显是 10秒啊,而且这才是一个案例。所以,不行。
if(i%5==0){
tmp = i;
while(tmp%5==0){
++num;
tmp /= 5;
}
}
}
printf("%d\n",num);
}
}
return 0;
}
2.运用数学规律求解
/*N!的乘法展开式中 :是5的倍数的个数+是5^2的倍数的个数+5^3.....
如50!:
含有10个5的倍数的数:5,15,20,25,30,35,40,45,50 【50/5=10】
含有2个5^2的倍数的数:25,50【50/(5^2)=2】
可见N!中一共有12个5相乘,那么尾0也必有12个
*/
#include <cstdio> //AC G++ 78ms int main() { int value; int T; scanf("%d",&T); while(T--){ scanf("%d",&value); int num = 0; value /= 5; while(value > 0){ num += value; value /= 5; } printf("%d\n",num); } return 0; }
相关文章推荐
- hdu 1124 Factorial 数论,就是求一个数的阶乘的结果末尾有多少0.
- 求一个阶乘n!的结果末尾有几个零
- 写一个程序,语言不限,打印出100的阶乘(即1*2*3*…*100)的精确数值结果(不能是浮点数)。如5的阶乘是1*2*3*4*5=120
- 求一个数的阶乘的结果的位数
- filter()的参数内容,查找语句。其中in可以在一个结果集中查找是否包含另一个结果集的数据。
- 在使用Hibernate时,因为一个查询需要更多的表连接而要使用SQL来解决性能问题。然而返回的结果集中包含了没有映射的Entity类中的表字段,在这个SQL中还有使用如何将层次关系的父子结点显示为横行
- hdu 1018 Big Number (求一个数的阶乘的位数,公式!!!)
- python求解一个数的阶乘有几个零
- 一个数的阶乘结果尾部会有多少个0?
- hdu 1018 Big Number (求一个数的阶乘的位数,公式!!!)
- all与any操作符和返回两个结果集和把一个结果集当表和查询结果创建表和同时更新几个字段
- 在做毕业设计的过程中,遇到了几个错误导致结果不对,在这里做一个总结
- 查找一个字符串中包含有几个指定字符串的数量
- 求一个数的阶乘(64位结果)
- 编写一个程序,统计给定文件中包含的每个单词出现的频率,并按单词表的顺序显示统计结果
- java正则匹配字符串中不包含一个或几个特定的字符串
- CodeWars 给定数值的阶乘结果中包含多少0
- 求1000!的结果中包含多少个0?注:1000! = 1×2×3×4×5×...×999×1000(求阶乘)
- HDU 1124 Factorial&&nyoj 84 阶乘的 0【数学】
- HDU_1018_n(1e7)的阶乘的结果的位数