这是我的代码,它已经过了一个小时但还没有返回值,有什么不对吗?
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
}
答案 0 :(得分:2)
要使该循环中断,它必须达到10^30 ~= 2^100
。第一个n
自然数的平方和大约等于n^3
。因此,当i
变为10^10 ~= 2^33
时,您的循环将大致中断。我猜int i
是32位,所以你可能溢出那个整数,我没有做精确的数学但是很有可能。
如果您选择64位变量(long
?),其上限大约为10^19
,您可能有机会就可以了
编辑:这是来自WolframAlpha的确切数学。