JAVA 大数阶乘,不用biginteger怎么做

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA 大数阶乘,不用biginteger怎么做相关的知识,希望对你有一定的参考价值。

1024!
也就是只能用JAVA基础编程的知识来实现,一道笔试题来的。。。请教。
具体怎么写啊!~字符串弄起来也很长啊,怎么实现它们相乘

参考技术A 字符串效率很低
用数组来做效率高很多
下面是求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怎么做的主要内容,如果未能解决你的问题,请参考以下文章

java数字运算结果太大,出错怎么办

大数阶乘问题

NYOJ题目28大数阶乘

大数计算问题

JAVA中解决大数乘法和加法问题

JAVA大数类库初始化BigInteger问题