首页 精选百科 > 正文

阶乘求和c语言(阶乘)

导读 真党的没有计算阶乘的公式的,也没有简便方法,只是硬算,也可以运用计算机,可以计算到65!,如果你想计算跟大的数,我建议你上百度寻找计...

真党的没有计算阶乘的公式的,也没有简便方法,只是硬算,也可以运用计算机,可以计算到65!,如果你想计算跟大的数,我建议你上百度寻找计算阶乘的软件,听说多大的数都能计算出来。

嘿!那个Q币的,怎么了?? ^_^ 还有这个参考: 由于阶乘运算的增长速度特别快(比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(""+count); } } Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=528778 参考资料:http://blog.csdn.net/hengshan/archive/2005/11/13/528778.aspx。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。