java - 我想在我的 Android 应用程序中使用大整数,但是当我应用运算符时我会收到错误?

标签 java android biginteger

我想计算阶乘我目前的代码是这样的:

else if(btn.getText().equals("x!"))
    {
        double LeftVal = Double.parseDouble(currentInput);
        double result = Double.NaN;
        if(currentInputLen > 0 && LeftVal >0)
        {
            result = Factorial(LeftVal);
        }

        resultText.setText(result+"");
    }

计算阶乘的代码是这样的:

private double Factorial(double input)
{
    double output=input;
    for(int i=(int) (input-1);i>0;i--)
    {
        output*=i;
    }

    return output;
}

我导入了java.math.*;并将我的代码更改为:

else if(btn.getText().equals("x!"))
    {
        BigInteger LeftVal = BigInteger(currentInput);
        BigInteger result = 0;
        if(currentInputLen > 0 && LeftVal >0)
        {
            result = Factorial(LeftVal);
        }

        resultText.setText(result+"");
    }

以及阶乘方法

private BigInteger Factorial(BigInteger input)
{
    BIgInteger output=input;
    for(int i=(int) (input-1);i>0;i--)
    {
        output*=i;
    }

    return output;
}

我在 Android 开发者网站上看到 BigInteger(string) 会将该字符串转换为大整数,但这不起作用并显示错误,而且使用常规数学错误时也存在错误。

我想使用大整数的原因是因为如果我计算12!使用 double 它以科学形式显示答案,其中 e 为我想要确切答案的东西提供动力。

最佳答案

对于使用 BigInteger 的阶乘方法,您可以使用:

private BigInteger factorial(BigInteger input) {
    BigInteger output = input;
    for (BigInteger i = input.subtract(BigInteger.ONE); i.compareTo(BigInteger.ZERO) > 0; i = i.subtract(BigInteger.ONE)) {
        output = output.multiply(i);
    }
    return output;
}

关于java - 我想在我的 Android 应用程序中使用大整数,但是当我应用运算符时我会收到错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22283892/

相关文章:

java - 有没有办法获取 'BigInteger' 变量的总大小?

java - 如何使用循环创建多个数组?

java - 如何编写我自己的数组和列表

java - 包含带有列表的查询的 jpa

java - 使用javaBeans Persistence机制保存java GUI

android - 无法让 android-maven-plugin 识别 SDK 路径

安卓/iOS : Titanium Appcelerator horizontal scrolling

java - 卡在 AVD 中运行 android 应用程序

c# - 为什么这个 BigInteger 值会导致堆栈溢出异常? C#

java - 访问字符串中超过 2^31 个字符的字符