Sum(N) =1^1+2^2+3^3+...+N^N
使用Java,
我如何使用BigInteger
找到最小的整数N,使得Sum(N)的值大于10 ^ 20?
我真的卡住了,请给我一些建议
这是我到目前为止所做的:
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(i); // i^i
bSum = bSum.add(bTmp); // sum = i^i+ (i-1)^(i-1)+ ....
sSum = bSum.toString();
if ( sSum.length() >21) {
System.out.println("i="+i +" bSum ="+bSum);
break;
}//
}//end_for
return bSum; // result
} // end_bigFunctionExample_2
}
答案 0 :(得分:0)
这是计算一些因子的线索:
import java.math.*;
public class FactorialBig {
public static BigInteger factorial(BigInteger n) {
if (n.equals(BigInteger.ZERO))
return BigInteger.ONE;
else
return n.multiply(factorial(n.subtract(BigInteger.ONE)));
}
public static void main(String[] args) {
for (int n = 0; n < 20; n++) {
BigInteger f = factorial(new BigInteger(new Integer(n).toString()));
System.out.printf("factorial(%2d) = %20s%n", n, f.toString());
}
}
}
您知道应将上述内容保存为名为“FacotrialBig.java”的文件。
答案 1 :(得分:0)
查看代码,您有一行bTmp.pow(2)
。这会使系列中的数字平方,但您需要将bTmp
提升为bTmp
幂。 Java似乎不想将BigInteger
作为pow
的参数,但您可以将pow
替换为另一个for
循环。
此外,sSum.length() >30
看起来只有在您的总和大于或等于10 29 时才会出现。是否有理由每次通过循环将数字转换为字符串,而不是将数字与10 20 进行比较?也许您可以在bSum > bMax
循环中添加for
之类的测试条件,而不是将其留空并使用break
退出。然后你可以在你的代码开头创建一个新的BigInteger bMax
并将其设置为10 20 。
对于测试,您可以将bMax
设置为小的,例如100,并查看您的程序是否给出了正确的结果。您可以手动计算系列的前几个步骤来检查您的程序。