1000!有几位数以及末尾有几个0.doc_第1页
1000!有几位数以及末尾有几个0.doc_第2页
1000!有几位数以及末尾有几个0.doc_第3页
1000!有几位数以及末尾有几个0.doc_第4页
1000!有几位数以及末尾有几个0.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1000!有几位数?1000!有几位数,为什么?1000!用科学计数法是a10x , 其中1 a 10,x为一特定整数,10x表示10的x次方。要求的是 x+1如:3189=3.189 1033189的位数是3+1=4当1 a 10时,0 lg(a) 1故有lg(a10x )=lg(a)+x即lg(a10x )的整数部分即为x同样lg(1000!)+1的整数部分为要求的整数lg(1000!)=lg(a)+ lg(10x)=lg(a) + xlg(1000!)=lg(1000*999*.*2*1)=lg(1000)+lg(999)+.+lg(1)lg(1000!)=lg(1000)+ lg(999)+.+lg(1) (为保证1000个小数相加不致产生误差每个数必须精确到0.0001以上,下例程序中故使用float)xlg(1000)+ lg(999)+.+lg(1)的整数部分这个就可以用程序实现了/* lg.c */#include #include int main()int i;double sum=0;for( i = 1;i = 1000;i+)sum = sum + log10(i );printf(The 1000! has %ds numbers.n,(int)sum + 1);=在估算出位数后,就可以进一步计算其具体的值:用数组的方法解决大数、巨数的阶乘结果越界的问题。具体算法中有最朴实的乘法运算思想,请各位细细体味。#include int main()int n; /阶乘大小printf(请输入n的大小:);scanf(%d,&n); /从键盘接收阶乘大小int a200; /确保保存最终运算结果的数组足够大int carry; /进位int digit = 1; /位数a0 = 1; /将结果先初始化为1int temp; /阶乘的任一元素与临时结果的某位的乘积结果 for(int i = 2; i = n; +i) /开始阶乘,阶乘元素从2开始依次“登场”/按最基本的乘法运算思想来考虑,将临时结果的每位与阶乘元素相乘 for(int j = 1, carry = 0; j =1; -i)printf(%d,ai-1);return 0;【2】1000的阶乘(1000!)结果有几个0(10000!-2499=10000/5+10000/25+10000/125+10000/625+10000/3125)1. package com.hisen.test;2.3. public class JC 4. public static void main(String args) 5. int x = 10000;6. int count = 0;7. while (x0)8. 9. count = count + x / 5;10. x = x / 5;11. 12. System.out.println(count);13. 14. 复制代码利用到了一个数学知识令f(x)表示正整数x末尾所含有的“0”的个数,则有:当0 n = 5时,f(n!) = k + f(k!), 其中 k = n / 5(取整)。通俗的解释就是:求5.所有5都被2拉去产生0了问题:N的阶乘(N!)中的末尾有多少个0? 例如:N = 5,N! = 120.末尾有1个0.分析:想到这个问题,有人可能第一反应就是现求出N!,然后再根据求出的结果,最后得出N!的末尾有多少个0。但是转念一想,会不会溢出,等等。 其实,从那些数相乘可以得到10这个角度,问题就变得比较的简单了。 首先考虑,如果N的阶乘为K和10的M次方的乘积,那么N!末尾就有M的0。如果将N的阶乘分解后,那么 N的阶乘可以分解为: 2的X次方,3的Y次方,4的5次Z方,.的成绩。由于10 = 2 * 5,所以M只能和X和Z有关,每一对2和5相乘就可以得到一个10,于是M = MIN(X,Z),不难看出X大于Z,因为被2整除的频率比被5整除的频率高的多。所以可以把公式简化为M=Z. 由上面的分析可以看出,只要计算处Z的值,就可以得到N!末尾0的个数方法一 要计算Z,最直接的方法就是求出N的阶乘的所有因式(1,2,3,.,N)分解中5的指数。然后求和 intfun1(intn)intnum=0;inti,j;for(i=5;i=n;i+= 5)j=i;while(j%5=0)num+;j/=5;returnnum;方法二:Z = N/5 + N /(5*5) + N/(5*5*5).知道N/(5的K次方)等于0公式中 N/5表示不大于N的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论