Когда я пытаюсь вычислить 2 степени n, когда n выше 30, я получаю 0, как я могу это исправить? - PullRequest
0 голосов
/ 01 ноября 2019

для моей домашней работы мне нужно написать код для вычисления 2 степени n (2 ^ n), в то время как мне удалось заставить его работать для n от 0 до 30, для 31 я получаю -2147483648 и для любого n выше 31 (33, 35,40 ..) я просто получаю 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

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

Используйте BigInteger. Итак 2^35 это:

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

        BigInteger answer = base.pow(power);

        System.out.println(answer.toString());
0 голосов
/ 01 ноября 2019

Вам нужно переключиться на использование примитива long. Примитив int имеет ограниченное значение 2 ^ (+/-) 31, поэтому он имеет значение по умолчанию, равное нулю, когда достигнет этого предела.

...