大数的阶乘,没想到啥好办法,姑且如此吧。
import java.math.BigInteger;
public class Factorials {
static int index = 1;
public static void main(String args[]) {
long starttime = System.currentTimeMillis();
int num[] = new int[10000];
num[0] = 1;
int n = Integer.parseInt(args[0]);
for (int i = 1; i < n; i++) {
int j = 0;
int carry = 0;
while (j < index) {
num[j] *= i;
num[j] += carry;
carry = (num[j] / 10000);
num[j] = (num[j] % 10000);
j++;
}
if (carry > 0) {
index = j + 1;
num[j] = carry;
}
}
for (int i = index - 1; i >= 0; i--) {
String s = "";
if (num[i] == 0)
s = "0000";
else if (num[i] < 10)
s = "000" + num[i];
else if (num[i] < 100)
s = "00" + num[i];
else if (num[i] < 1000)
s = "0" + num[i];
else
s = "" + num[i];
System.out.print(s);
}
System.out.println();
long endtime = System.currentTimeMillis();
System.out.println((endtime - starttime) + "(ms)");
starttime = System.currentTimeMillis();
BigInteger b = new BigInteger("1");
for (int i = 1; i < n; i++) {
BigInteger c = new BigInteger("" + i + "");
b = b.multiply(c);
}
System.out.println(b);
endtime = System.currentTimeMillis();
System.out.println((endtime - starttime) + "(ms)");
}
}
分享到:
相关推荐
用汇编实现的大数阶乘算法,这个算法可以实现任意大的两个数相乘
数据结构算法与应用代码,大数阶乘,通过单链表实现大数阶乘,对比较的书进行阶乘运算,主要是通过单链表实现
大数阶乘数据结构算法课程设计-副本.pdf
N!的求法 大数阶乘 最好的大数阶乘程序 C++
【C#】求大数阶乘,求大数阶乘_算法_C#
阶乘 阶乘计算 大数阶乘 大整数阶乘 用数组计算阶乘
大数阶乘如1000!无数据类型可以表示,用链表实现大数阶乘
基于单链表的大数阶乘,并有相应的程序执行效率的时间函数
程序通过链表实现了大数阶乘,速度比较快,而且可以知道运行时间,很实用
用C++在控制台上写的。首先用链表实现了大数阶乘,在这基础上只要提供这样的两个链表就可以实现大数加法。想实现大数的乘法,但是失败了……
计算大数阶乘,利用数组存储数据防止使用int,long,long long等存储数据溢出的情况。
C++版本大数阶乘原理讲解及代码实现
用双链表实现大数阶乘运算,可以测试其性能,里面有相映的时间测试函数
简单的链表实现大数阶乘的程序 是双向链表实现的 初学者可以看看
Windows32位汇编语言程序,课程设计求大数阶乘。这个程序可能求1000以内的阶乘。
大数阶乘的C++算法实现,里面有三个,除了数据结构不一样外。算法的思想还是一样的。很不错的呦
用链表实现大数阶乘,这里用C++来实现。 class node { public: int data; node* link; };
单链表结构实现的大数阶乘,VC简单程序复制进去便可实现。采用递归调用的方法。
快速,高精度的大数阶乘程序。(vb.net)
由于计算机存储位数的限制,运用链表实现大数阶乘