1*2*3*4***n n个连续自然数相乘求积 有什么解决方法?

* 是指乘号。。。 有什么可以列出的公式吗?
阶乘的公式?都有什么来的?忘了。。。

由于阶乘运算的增长速度特别快(比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个回答  2009-02-18
没有,只有一个个相乘了,一般记为n!,读做n的阶乘。
第2个回答  2009-02-17
这是阶乘,1*2*3***n=n!,解决时利用阶乘的相关公式就可以了
第3个回答  2009-02-17
可以

1*2*3*4***n n个连续自然数相乘求积 有什么解决方法?
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 ...

多个连续自然数的乖积求法
n个连续自然数求积是没有通项公式的,但上述乘积可简写为“400!”。

末尾有几个0? 如果将1到1000的连续自然数相乘,积的末尾共有几个0?
625的倍数有[1000\/625]=1个 故5的200+40+8+1=249次方是 所求积的因子 而2^249显然是 所求积的因子 所以共有249个0

从一开始2012个连续自然数的积的尾数有几个连续的零
100 = 2*2*5*5 ……这个连乘积里,因数2的个数总多于因数5的个数.因此末尾出现一个0,就代表1个因数5.因此求积中因数5的个数即可.2012\\5 + 2012\\25 + 2012\\125 + 2012\\625 = 402 + 80 + 16 + 3 = 501 这个连乘积的末尾有501个连续的0.“\\”表示除法求商向下取整数.2010\\5 + 2...

范德蒙行列式中∏的具体运算方法
行列式的结果是对每个ai(i=1,2,...,n)求差在相乘(下标小的为被减数,下标大的为减数),那个∏就是求积符号,有什么问题吗?

六年级数学下册一、二单元知识点归纳整理
第一单元 负数 1.负数:在数轴线上,负数都在0的(左侧),所有的负数都比自然数小。 正数:大于0的数叫正数(不包括0) (0)既不是正数,也不是负数,它是正、负数的界限。 第二单元 圆柱和圆锥 1、圆柱的特征:(1)底面的特征:圆柱的底面是完全相等的两个圆。 (2)侧面的特征:圆柱的侧面是一个曲面。 (3)...

韦达定理的主要内容是什么?
ΠXi=[(-1) ]×A(0)\/A(n)其中∑是求和,Π是求积。一元五次方程验证 已知一个一元五次方程:a1*(x^5)+b*(x^4)+c*(x^3)+d*(x^2)+e*x+f = 0 设该式为形式1 根据高斯的代数原理:上式在复数范围内必可分解成: a1*(x-x1)*(x-x2)*(x-x3)*(x-x4)*(x-x5)=0 的...

跪求全部初中数学非课本上的公式,结论
∏Xi=(-1)^n*A(0)\/A(n) 其中∑是求和,∏是求积。 如果一元二次方程 在复数集中的根是,那么 由代数基本定理可推得:任何一元 n 次方程 在复数集中必有根。因此,该方程的左端可以在复数范围内分解成一次因式的乘积: 其中是该方程的个根。两端比较系数即得韦达定理。

小学一至五年级数学公式及定义有哪些?
其中大多数公式不仅可顺用(多项式乘法),还可逆用(因式分解)。2、除法 除法是四则运算之一。已知两个因数的积与其中一个非零因数,求另一个因数的运算,叫做除法。两个数相除又叫做两个数的比。若ab=c(b≠0),用积数c和因数b来求另一个因数a的运算就是除法,写作c÷b,读作c除以b(或b...

一元二次方程该怎么解,要详细,明天就要期末考试了……
一元二次方程有四种解 法:1、直接开平方法;2、配方法;3、公式法;4、因式分解法。 二、方法、例题精讲: 1、直接开平方法: 直接开平方法就是用直接开平方求解一元二次方程的方法。用直接开平方法解形如(x-m)2=n (n≥0)的 方程,其解为x=m±√n 例1.解方程(1)(3x+1)^2=7 (2)9x^2-...

相似回答