用Java计算的权力

时间:2014-01-29 20:56:07

标签: java

我有一个程序要写。要求是1.实现代码(选择你喜欢的语言),它将计算2 ^(3 ^(4 ^(5 ^ 6))的值

到目前为止我所写的是(4 ^(5 ^ 6)。但是,我得到0作为输出,尽管事实上我甚至将第二个参数从整数改为long。需要一点帮助。这里需要帮助。这里是我的代码:

public static void main(String args[]) {
    int i=4,j=5,k=6;
    System.out.println(pow(i,pow(j,k)));
}

public static long pow(int c, long l){       
    long n=1;
    for(int i=0;i<l;i++){
        n=c*n;
    }
    return n;            
}

7 个答案:

答案 0 :(得分:4)

4 ^(5 ^ 6)等于4 ^ 15625,大约是1,53 * 10 ^ 9407,这个数字大大超过了Long类型的最大值,即(2 ^ 64)-1。 / p>

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

答案 1 :(得分:3)

这些数字很大。真。 5 ^ 6 = 15625.将4提升到那个力量,你将得到足够的数字,因为已知宇宙中有粒子。

0的问题来自4是100的二进制。乘以4,你得到二进制10000。提升到稍微多一点(最大功率8,16,如果数据类型支持它可能是32;一般说话)并且你将丢弃整数表示中的单个1位=&gt; 0

答案 2 :(得分:2)

正如你所说,你可以选择语言。我建议你用Matlab或Octave实现这个计算:

2^3^4^5^6

打印出您期望的结果。

答案 3 :(得分:1)

输出足够大,并在穿过Long.MAX_VALUE后跳转到零。

答案 4 :(得分:1)

您可以使用Java的BigInteger,但我不确定这么大的数字是否可以存储在内存中。

答案 5 :(得分:1)

首先,您可以使用Math.pow(2,3)来计算2 ^ 3.但是由于输出很大,如下面的代码所示,即使double也将返回Infinity:

package test;

public class Test {

    public static void main(String[] args) throws Exception {
        // 2^(3^(4^(5^6)))
        System.out.println(Math.pow(2, Math.pow(3, Math.pow(4, Math.pow(5, 6)))));
    }

}

但是你可以使用java.math.BigDecimal,它可以处理这个大整数。对于这个问题我会建议python,你可以写吗

2 ** (3 ** (4 ** (5 ** 6)))

编辑:

你知道4 **(5 ** 6)已经是

http://paste.ubuntu.com/6840260/

你真的想用Java中的这个数字计算,这不是数学问题最快的语言吗?

答案 6 :(得分:0)

你试过这个算法吗? Exponentation by squaring