在java中用BigInteger替换所有整数

在java中用BigInteger替换所有整数,java,math,int,biginteger,Java,Math,Int,Biginteger,通过引用数学stackexchange中的问题,我试图编写一个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);Di

通过引用数学stackexchange中的问题,我试图编写一个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);
        }
    }   
}}
类测试{
公共静态void main(字符串[]args){

例如,对于(int Num=36;Num,您需要用biginger替换所有int/long声明,并检查库引用以用biginger使用的函数调用替换算术赋值

T += y;
变成

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

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

当转到另一个方向时,如果值太大,则仅转换(截断)较低的位,T.longValue()。我建议在编码时在线阅读BigInteger参考…

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


在您的例子中,Fac变量可能需要是BigInteger以及在其上迭代的所有内容。在大型程序中,您必须查找需要使用BigInteger的地方,然后在那里只使用BigInteger。

BigInteger将比int或long原语占用更多内存,并且速度要慢得多。比如,数量级的速度要慢。对于大多数用法,long就可以了。您不能重载常用的整数算术运算符“+”、“-”、“*”例如,我们可以将
int 10
添加到
biginger 50
,而不是
myInt+=10;
,您可以执行:
myBigInt=myBigInt.add(biginger.valueOf(10));
或类似的。