JAVA 大数阶乘,不用biginteger怎么做
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA 大数阶乘,不用biginteger怎么做相关的知识,希望对你有一定的参考价值。
1024!
也就是只能用JAVA基础编程的知识来实现,一道笔试题来的。。。请教。
具体怎么写啊!~字符串弄起来也很长啊,怎么实现它们相乘
用数组来做效率高很多
下面是求1000项的Fibonaci数列,你参考下改成求阶乘也一样
public class Fibonacci
private static final int MAX_LENGTH = 1000000;
private static int[] a;
private static int[] b;
private final static int LEN = 1000000000;
private static int carry = 1;
public static void main(String[] args)
a = new int[MAX_LENGTH];
b = new int[MAX_LENGTH];
a[0] = 1;
b[0] = 1;
double begin = System.currentTimeMillis();
for(int i = 0; i < 1000; i++)
addToA();
addToB();
display(b);
double end = System.currentTimeMillis();
System.out.println("Time:" + (end - begin) / 1000);
public static void addToA()
int carryNum = 0;
for(int i = 0; i < carry; i++)
carryNum = (a[i] + b[i]) / LEN;
a[i] = (a[i] + b[i]) % LEN;
a[i+1] += carryNum;
if(carryNum == 1)
carry++;
public static void addToB()
int carryNum = 0;
for(int i = 0; i < carry; i++)
carryNum = (b[i] + a[i]) / LEN;
b[i] = (b[i] + a[i]) % LEN;
b[i+1] += carryNum;
if(carryNum == 1)
carry++;
public static void display(int[] n)
for(int i = carry - 1; i >= 0; i--)
System.out.print(n[i]);
System.out.println();
本回答被提问者采纳 参考技术B 我们以前学c时遇到过类似的问题,就是不把大数看成一个数,而是整型数组,每一位对应一个数组元素,计算时就一位一位的乘。
Java也可以用同样的思路吧,希望对你有帮助。 参考技术C 呵呵,最绝地用字符串来写撒!
Java 实现阶乘 BigInteger
import java.math.BigInteger; public class getFactorial { public static void main(String[] args) { // 15511210043330985984000000 System.out.println(getFactorial("25").toString()); // 9223372036854775807 System.out.println(Long.MAX_VALUE); } public static BigInteger getFactorial(BigInteger num) { /** * * 1 大于 1 才继续计算 * 2 while 比 for 少点代码 * 3 int long 范围有限 * 4 递归浪费资源,深度太深jvm不支持,StackOverflowError * 5 使用更专业的计算包 */ BigInteger result = num; while(num.compareTo(BigInteger.ONE) > 0) { num = num.subtract(BigInteger.ONE); result = result.multiply(num); } return result; } public static BigInteger getFactorial(String numString) { return getFactorial(new BigInteger(numString)); } }
以上是关于JAVA 大数阶乘,不用biginteger怎么做的主要内容,如果未能解决你的问题,请参考以下文章