从1开始的连续2009个自然数相乘的(1×2×3×……×2009)积末尾有几个0

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/03 22:48:52
从1开始的连续2009个自然数相乘的(1×2×3×……×2009)积末尾有几个0

从1开始的连续2009个自然数相乘的(1×2×3×……×2009)积末尾有几个0
从1开始的连续2009个自然数相乘的(1×2×3×……×2009)积末尾有几个0

从1开始的连续2009个自然数相乘的(1×2×3×……×2009)积末尾有几个0
25个0

由于阶乘运算的增长速度特别快(比2^n的增长速度快),对于较小整数的阶乘运算采用简单的递规算法可以实现,但是对于大整数的乘法(比如1000!),则传统的递规算法就失去了作用。
由于本人的水平不高,用下列拙劣的方式实现,请高人多多指教。具体如下:定义一个很长的数组,用数组的每一项表示计算结果的每一位。例如,7!=5040,a[1000],则a[0]=0,a[1]=4,a[2]=0,a[3]...

全部展开

由于阶乘运算的增长速度特别快(比2^n的增长速度快),对于较小整数的阶乘运算采用简单的递规算法可以实现,但是对于大整数的乘法(比如1000!),则传统的递规算法就失去了作用。
由于本人的水平不高,用下列拙劣的方式实现,请高人多多指教。具体如下:定义一个很长的数组,用数组的每一项表示计算结果的每一位。例如,7!=5040,a[1000],则a[0]=0,a[1]=4,a[2]=0,a[3]=5。
程序源代码:
/**
*计算大数的阶乘,算法的主要思想就是将计算结果的每一位用数组的一位来表示:如要计算5!,那么首先将
*(1) a[0]=1,然后a[0]=a[0]*2,a[0]=2,
*(2) a[0]=a[0]*3,a[0]=6
*(3) a[0]=a[0]*4,a[0]=24,此时a[1]=2,a[0]=4
*/
public class Factorial
{
static int a[] = new int [10000];
static void factorial(int n)
{
for(int i=2; i< a.length; i++)
a[i] = 0; //将数组元素初始化
a[0] = 1; //用数组的一项存放计算结果的位数
a[1] = 1; //将第一项赋值为一
for(int j= 2; j <= n; j++)
{
int i=1;
int c = 0; //c表示向高位的进位
for(; i <= a[0]; i++)
{
a[i] = a[i] * j + c;//将来自低位的计算结果和本位的结果相加
c = a[i] / 10;
a[i] = a[i] % 10;
}
for(; c != 0; i++)
{
a[i] = c%10;
c = c / 10;
}
a[0] = i - 1;
}
}
public static void main(String[] args)
{
String num = args[0];
int count = 0;
int n = Integer.parseInt(num);
f(n);
for(int i= a[0]; i>0; i--)
{
count++;
System.out.print(/*"a[" + i + "]=" + */a[i]/* + " "*/);
}
System.out.println("\n"+count);
}
}
参考资料:http://blog.csdn.net/hengshan/archive/2005/11/13/528778.aspx

收起

已知从1开始连续n个自然数相乘.乘积的尾部恰有25个连续的0,那么n的最大值是多少? 已知从1开始连续n个自然数相乘,1×2×3×……×n,乘积尾部恰有10个连续的0,n的最小值是多少? 从1开始的连续2009个自然数相乘的(1×2×3×……×2009)积末尾有几个0 已知从1开始的自然数相乘,1乘2乘3乘``````n,乘积的尾部有25个连续的0,那么n最大是快 已知从1开始连续n个自然数相乘,1*2*3*……*n乘积的尾部有35个连续的0,那n的最大值和最小值各是多少? 从1开始1990个连续自然数的和一定是( )从1开始1990个连续自然数的和一定是( 数)?奇数?偶数?不能确定? 从1开始的连续1000个自然数中,各位数字之和是5的自然数有多少个? 从1开始2012个连续自然数的积末尾有几个零 从1开始,1989个连续自然数的和是奇数还是偶数 从1开始连续n个自然数的立方和是多少? 从1开始,1989个连续自然数的和是奇数还是偶数 从1开始1990个连续自然数的和一定是什么数? 从1开始连续自然数的和是231,这些连续自然数是哪些 在从1开始的连续自然数里,第100个不能被3整除的自然数是多少?如题. 求出以内100最大自然数n,使的从1开始连续个自然数的立方和小于20000 从1开始,连续的将自然数写到2009,那么一共写了()个数字0 已知从1开始连续N个自然数相加的和是n(n+1)/2,则从1到1000这1000个自然数的和是多少? 已知从1开始连续N个自然数的乘积1×...×N的尾部恰有31个连续的零那么N的最大值是多少?