【问题标题】:Replacing all Integers with BigInteger in java在java中用BigInteger替换所有整数
【发布时间】:2016-03-18 03:13:52
【问题描述】:

通过引用数学 stackexchange 中的 this 问题,我尝试编写一个 java 程序来查找可能的结果。

class testing{

public static void main(String []args){
    for(int Num=36;Num<1000000;Num++){
        int[] Fac=new int[4];       

        for(int Div=1,ar=0;(Div<=Num)&(ar<Fac.length);Div++){

            if((Num % Div)==0){
                Fac[ar]=Div;
                ar++;
            }
        }
        int T=0;
        for(int y:Fac){ 
            y*=y;
            T+=y;
        }
        if(T==Num){
            for(int x:Fac){
                System.out.print( x+",");
            }
            System.out.println(":"+Num);
        }
    }   
}}

我在这里使用了int 数据类型并检查了多达 1000000 个数字。但我发现只有 130 个在满足问题必要条件的范围内。 我有一个问题,如果在intlong 范围之外还有更多示例?是的,我发现BigInteger 会来救援。 但是如果我想将这些Integer 数据类型值替换为BigInteger 对象类型值,我是否必须重新编写整个代码?或者有什么方法可以将这些 int 类型转换为 BigInteger?

其实这是一个小源代码,用BigInteger再写一次也不难。但是,如果我们用integers 编写了一个大程序,然后我们需要大整数而不是小整数呢?

【问题讨论】:

  • BigInteger 将比 int 或 long 原语占用更多的内存,而且速度会很多。就像,慢几个数量级。对于大多数用法,long 就可以了。
  • 您不能重载通常的整数算术运算符“+”、“-”、“*”等来使用 BigIntegers,如果这是您所要求的。

标签: java math int biginteger


【解决方案1】:

另一个问题是,您实际上需要哪些变量是 BigIntegers?一个数字超过 int / long 界限并不常见。

在您的情况下,Fac 变量可能需要是 BigInteger 以及迭代它的所有内容。在大型程序中,您必须查看需要使用 BigIntegers 的位置,然后您将只在此处使用 BigIntegers。

【讨论】:

  • 我们做一个变量BigInteger之后,我们可以做涉及正常int数字的操作吗?例如,我们可以将int 10 添加到BigInteger 50 吗?
  • 代替myInt += 10;,你可以这样做:myBigInt = myBigInt.add(BigInteger.valueOf(10));或类似的。
【解决方案2】:

您需要将所有 int/long 声明替换为 BigInteger,并检查库引用以将算术赋值替换为 BigInteger 使用的函数调用,例如

T += y;

变成

T = T.add(y);

虽然您应该专门使用 BigInteger 以避免任何截断问题,但您可以使用 BigInteger.valueOf(i) 将 int/long 类型转换为 BigInteger,例如

int i = 123;
BigInteger T = BigInteger.valueOf(i)

在另一个方向上,如果值太大,只有低位被转换(截断),使用 T.longValue()。我建议在编码时在线阅读 BigInteger 参考资料...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多