在java中用BigInteger替换所有Integers

时间:2016-03-18 03:13:53

标签: java math int biginteger

通过引用数学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编写一个大程序然后我们需要大整数而不是小整数呢?

2 个答案:

答案 0 :(得分:0)

您将需要使用BigInteger替换所有int / long声明,并检查库引用以使用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参考资料......

答案 1 :(得分:0)

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

在你的情况下,Fac变量可能需要是BigInteger以及迭代它的所有东西。在大型程序中,您将需要查看使用BigIntegers的位置,然后您将只在那里使用BigIntegers。