原文:一步一步写算法(之n!中末尾零的个数统计)

【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

在很多面试的题目中,求n!结果中零的个数也是经常遇到的一道题目。那么这道题目的解决方法究竟是什么呢?我愿意在此和大家分享一下我自己的一些看法,有不同见解的朋友欢迎多提意见。

求n!中零的个数主要在于乘数中有没有能被2和5整除的数,只要能找到被2和5整数的乘数即可,所以,我的代码流程是这样的:

(1)查找当前数据中有没有可以整除2的整数,同时修改整数的数值

(2)查找当前数据中有没有可以整除5的整数,同时修改整数的数值

(3)如果1、2的条件同时满足,表示已经有一个零了,count++

(4)重复1、2的过程,直到1、2中有一个条件为假

说了这么多,那么代码应该怎么书写呢?下面是我个人写的一个例子,欢迎大家写出自己的想法:

int count_zero_number(int value)
{
int count;
int index;
int* pData;
int flag_two;
int flag_five;
if(value <= 0)
return 0; pData = (int*)malloc(sizeof(int) * value);
assert(NULL != pData);
memset(pData, 0, sizeof(int) * value); for(index = 0; index < value; index ++){
pData[index] = index + 1;
} count = 0;
do{
/* reset the flag value */
flag_two = 0;
flag_five = 0; for(index = 0; index < value; index ++){
if( 0 == (pData[index] % 2)){
pData[index] /= 2;
flag_two = 1;
break;
}
} if(!flag_two)
break; for(index = 0; index < value; index ++){
if( 0 == (pData[index] % 5)){
pData[index] /= 5;
flag_five = 1;
count ++;
break;
}
} }while(flag_five); free(pData);
return count;
}

【预告: 下一篇博客主要介绍随机扑克牌的算法】

一步一步写算法(之n!中末尾零的个数统计)的更多相关文章

  1. 一步一步写算法(之挑选最大的n个数)

    原文:一步一步写算法(之挑选最大的n个数) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 从一堆数据中挑选n个最大的数,这个问题是网上流传的 ...

  2. 一步一步写算法(之prim算法 下)

    原文:一步一步写算法(之prim算法 下) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 前两篇博客我们讨论了prim最小生成树的算法,熟悉 ...

  3. 一步一步写算法(之prim算法 中)

    原文:一步一步写算法(之prim算法 中) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] C)编写最小生成树,涉及创建.挑选和添加过程 MI ...

  4. 一步一步写算法(之prim算法 上)

    原文:一步一步写算法(之prim算法 上) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 前面我们讨论了图的创建.添加.删除和保存等问题.今 ...

  5. 一步一步写平衡二叉树(AVL树)

    平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树.1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵 ...

  6. .NET跨平台:在Mac上跟着错误信息一步一步手写ASP.NET 5程序

    今天坐高铁时尝试了一种学习ASP.NET 5的笨方法,从空文件夹开始,根据运行dnx . kestrel命令的错误信息,一步一步写代码,直至将一个最简单的ASP.NET程序运行起来. 尝试的具体步骤如 ...

  7. 一步一步理解Paxos算法

    一步一步理解Paxos算法 背景 Paxos 算法是Lamport于1990年提出的一种基于消息传递的一致性算法.由于算法难以理解起初并没有引起人们的重视,使Lamport在八年后重新发表到 TOCS ...

  8. 《一步一步写嵌入式操作系统》读书笔记1—Skyeye介绍、安装和HelloWorld

    2013-11-14 最近在看<一步一步写嵌入式操作系统>,感觉此书甚好,许多地方讲得很清楚.可操作性强,计划边读边实践边写笔记,希望能够逐步熟悉嵌入式操作系统底层的东西,最终剪裁出一套实 ...

  9. 一步一步写一个简单通用的makefile(三)

    上一篇一步一步写一个简单通用的makefile(二) 里面的makefile 实现对通用的代码进行编译,这一章我将会对上一次的makefile 进行进一步的优化. 优化后的makefile: #Hel ...

随机推荐

  1. HihoCoder——Trie树

    本文出自:http://blog.csdn.net/svitter 原题:http://hihocoder.com/contest/hiho2/problem/1 题解:使用Trie树..基础题目.一 ...

  2. 【Hibernate学习】 ——ORM(三)

    前面几种关系我们曾经就常常常使用,对于继承我们也并不陌生,常常接触的类与类之间的继承用extendskeyword,那么在表与表的关系中怎样表示呢?以下我们来讲继承映射. 继承有三种实现的策略,单表继 ...

  3. html5 兼容参考文档 与 浏览器hack兼容参考文档

    移动端兼容参考文档 http://mobilehtml5.org/ 浏览器hack http://browserhacks.com/ 附上部分截图

  4. Cocos2d-x 游戏植入广告(百度插屏)

    DEMO下载:http://download.csdn.net/detail/oyangyufu/7652803 1.声明Activity <!-- 声明百度的Activity --> & ...

  5. ECLIPSE IDEA 调音 1

    为自己所用IDE进行jvm优 首先进行日志输出配置 Eclipse  改动eclipse.ini IDEA   改动 idea.exe.vmoptions 添加打印日志的配置參数 -XX:+Print ...

  6. Microsoft.AlphaImageLoader过滤评论

    Microsoft.AlphaImageLoader是IE滤镜的一种,其主要作用就是对图片进行透明处理.尽管FireFox和IE7以上的IE浏览器已经支持透明的PNG图片,可是就IE5-IE6而言还是 ...

  7. Linux对于录音

    一.原理简介 在Linux下,记录--从dsp读取数据.播放--至dsp设备写入数据. 开发板採用声卡UDA1341实现音频编解码,完毕A/D和D/A转换,芯片UDA1341与CPU的连接图例如以下: ...

  8. SICP 习题 (1.37)解题总结

    SICP 习题 1.37是一条非常长的题目,主要讲的是无穷连分式.无穷连分式对我来说又是一个陌生的概念,于是又去百度了一番,发现无穷连分式也是一个非常有意思的话题,涉及到无理数的表达.只是我建议大家还 ...

  9. springmvc集成Ueditor插件实现图片上传2、

    一.下载Ueditor插件. 地址:http://ueditor.baidu.com/website/download.html 二.环境搭建. 具体可以参看http://fex.baidu.com/ ...

  10. Hadoop之——CentOS构造ssh否password登录注意事项

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46388809 前提配置:使用root登录改动配置文件:/etc/ssh/sshd_ ...