【问题标题】:When i try to calculate 2 power n when n above 30 i get 0, how can i fix it?当我尝试计算 2 幂 n 当 n 高于 30 时我得到 0,我该如何解决?
【发布时间】:2020-02-27 23:36:30
【问题描述】:

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

公共类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

【问题讨论】:

  • 如果你想处理大数,你正在跨越 Java 中的 int 范围,使用 BigInteger 代替

标签: java pow


【解决方案1】:

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

【讨论】:

  • 首先,为什么不能使用long?其次,任何固定宽度的整数表示都会有一个溢出点,所以无论如何你都必须为此编写代码。您是否允许编写代码以防止可能出现的错误?
  • 只是long不能用吗?您是否可以考虑使用其他原始类型,您可以在Java Documentation 中找到它们的列表。你能澄清一下你的其他限制是什么吗?
  • 您不能将 2^-31 存储在 int 中。或者 2^31,就此而言。 int 的范围是 -2^31 到 2^31 - 1。
  • 他们大学一年级的计算机科学专业,他们希望我们只使用 int 并使用数学解决方案
  • 这个任务只计算 0 到 30 之间的 n,所以这段代码很好,但下一个任务是打印 (2^n)%k 的任何 n 甚至超过 30 他们给了我们这个提示: (? ⋅ ?)%? = ((?%?) ⋅ (?%?)) %k
【解决方案2】:

使用 BigInteger 。所以2^35 是:

        BigInteger base = new BigInteger("2");
        int power = 35;

        BigInteger answer = base.pow(power);

        System.out.println(answer.toString());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-11
    • 2021-08-04
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多