JAVA运行时间过长

时间:2014-11-24 20:56:09

标签: java biginteger

这是我的代码,它已经过了一个小时但还没有返回值,有什么不对吗?

import java.math.BigInteger;

public class PROJECTV1 {  
    public static void main(String[] args) {    
        BigInteger bResult = bigFunctionExample_2();
            System.out.println(" => result_got:" + bResult);    
        System.out.println(); //newline     
    }// end_main

    public static BigInteger bigFunctionExample_2() {    
        BigInteger bSum = BigInteger.ZERO;
        BigInteger bTmp;
        String sSum;
        // BigInteger bResult =0;

        for (int i = 1; ; i++) {    
            bTmp = BigInteger.valueOf(i);    
            bTmp = bTmp.pow(2); // i^2    
            bSum = bSum.add(bTmp); // sum = i^2+ (i-1)^2 + ....

            sSum = bSum.toString();    
            if (sSum.length() > 30) {

                System.out.println("i=" + i + " bSum =" + bSum);    
                break;
            }

        }//end_for

        return bSum; // result
    }
    // end_bigFunctionExample_2    
}

1 个答案:

答案 0 :(得分:2)

要使该循环中断,它必须达到10^30 ~= 2^100。第一个n自然数的平方和大约等于n^3。因此,当i变为10^10 ~= 2^33时,您的循环将大致中断。我猜int i是32位,所以你可能溢出那个整数,我没有做精确的数学但是很有可能。

如果您选择64位变量(long?),其上限大约为10^19您可能有机会就可以了

编辑:这是来自WolframAlpha的确切数学。