java - 当我尝试计算 2 的 n 次幂时,当 n 大于 30 时,我得到 0,我该如何修复它?

标签 java pow

对于我的家庭作业,我需要编写代码来计算 2 n 次方 (2^n) 虽然我设法让它适用于从0到30的n,但对于31我得到-2147483648 对于任何大于 31 (33,35,40..) 的 n,我只得到 0.. 我该如何处理它? 我需要使用简单的命令,但我不能使用数学战俘

公共(public)类Task3a{

public static void main(String[] args) {
    //---------------write your code BELOW this line only!--------------
    Scanner myScanner = new Scanner (System.in);
    int n = myScanner.nextInt(); 
    int expo = n ;
    int base = 2;
    if (n==0){
        System.out.println("1");
    }
    if (n==1){
        System.out.println(base);
    }
    else{
        while(expo>1){
            base = base * 2 ;
            expo = expo - 1;
        }
        System.out.println(base);
    }
    //---------------write your code ABOVE this line only!--------------
}

}

正如我所说,例如 2^35 我得到 0

最佳答案

您需要切换到使用原语long。基元 int 的限制值为 2^(+/-)31,因此一旦达到该限制,它就会默认为零。

关于java - 当我尝试计算 2 的 n 次幂时,当 n 大于 30 时,我得到 0,我该如何修复它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58663173/

相关文章:

java - 没有这样的字段错误: RESOURCE_PREFIX when using Tess4J with Eclipse

java - android使用pcap库

java - 如何进行延迟的非阻塞函数调用

java - ByteBuddy 附加到本地正在运行的进程

c - C 中 0 和 1 之间的数字幂

python - 为什么 2**100 比 math.pow(2,100) 快这么多?

java - 比较类类型与继承

c - 当存在 powl() 时,sscanf() 会导致链接失败

c - 为什么我不能用 pow 函数重现浮点问题?

java - 在 Java 中使用 Math.pow 确定立方体的表面积,并且 'skipping' 也有困难