2014-11-24 78 views
2

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

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  
} 
+3

您的代码目前*真的很难阅读,随机空白行和缺少缩进。当你发布信息时,请多花点时间 - 让帖子看起来像你想回答的那种帖子。 – 2014-11-24 20:57:13

+2

@FredLarson:当它击中'break'语句时,想必... – 2014-11-24 20:58:00

+2

@FredLarson在break语句中。当然,这对于一个循环来说真的很差......它可能应该是一个“while”循环。 – 2014-11-24 20:58:34

回答

2

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

如果你去一个64位变量(long?),其中有大约10^19上限,你可能有机会这将是确定。

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

+0

感谢您的帮助,我想我应该再一次工作。 – 2014-11-24 21:19:12

+0

你能解释一下“可能有机会”吗? – 2014-11-24 21:19:44

+0

您的意思是“前n个自然数的平方和”? – Arkadiy 2014-11-24 21:21:17