1000!有几位数以及末尾有几个0

上传人:m**** 文档编号:507800285 上传时间:2022-09-05 格式:DOCX 页数:9 大小:20.28KB
返回 下载 相关 举报
1000!有几位数以及末尾有几个0_第1页
第1页 / 共9页
1000!有几位数以及末尾有几个0_第2页
第2页 / 共9页
1000!有几位数以及末尾有几个0_第3页
第3页 / 共9页
1000!有几位数以及末尾有几个0_第4页
第4页 / 共9页
1000!有几位数以及末尾有几个0_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《1000!有几位数以及末尾有几个0》由会员分享,可在线阅读,更多相关《1000!有几位数以及末尾有几个0(9页珍藏版)》请在金锄头文库上搜索。

1、1000!有几位数?1000!有几位数,为什么?1000!用科学计数法是ax10Ax ,其中1 a 10, x为一特定整数,10仪表示10的x次方。要求的是x+1如:3189=3.189 x 10A33189的位数是3+1=4当 1 a 10 时,0 lg(a) #in elude int mai n()int i;double sum=0;for( i = 1;i int mai n()阶乘大小从键盘接收阶乘大小/确保保存最终运算结果的数组足够进位位数将结果先初始化为1/阶乘的任一元素与临时结果的某位int n;printf(请输入n的大小:”);sea nf(”d”,&n);int a20

2、0;大int carry;int digit = 1;a0 = 1;int temp;的乘积结果for(int i = 2; i v= n; +i)开始阶乘,阶乘元素从2开始依次登场”按最基本的乘法运算思想来考虑,将临时结果的每位与阶乘元素相乘for( int j = 1, carry = 0; j v= digit; +j) 相应阶乘中的一项与当前所得临时更新临时结果的位上信息/看是否有进位如果有进位temp = aj-1 * i + carry;结果的某位相乘(加上进位)aj-1 = temp % 10;carry = temp / 10;while(carry)a+digit-1 = c

3、arry % 10;新加一位,添加信息。位数增1carry /= 10;看还能不能进位prin tf(结果是:n%d ! = ”,n);显示结果for( int i = digit; i =1; -i)pri ntf(”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.5.int x = 10000;6.int count = 0;7.whi

4、le (x0)public static void main(String args) count = count + x / 5;10.11.12.System.out.println(count);X = X / 5;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.分析:想到这个问题,有人可能第一反应就是现求出

5、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的个

6、数 方法一要计算Z,最直接的方法就是求出N的阶乘的所有因式(1,2,3,.,N)分解中5的指数。然后求和int funl(int n)int num =0;int i, j;for (i =5;i = n;i += 5)j = i; while (j %5=0)num+; j /=5;return num;方法二:Z = N/5 + N /(5*5) + N/(5*5*5)知道 N/(5 的 K 次方)等于 0公式中N/5表示不大于N的数中能被5整除的数贡献一个5, N/(5*5)表示不大于N的数中能被25整除的数再共享一个5int fun2(i nt n)0;int num = while(n)num+= n /5;n / 5;return num;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号