Double / Long в BigInteger - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь создать программу, которая находит 2 в степени большого целого числа n.

Я получаю сообщение об ошибке, что double не может быть преобразовано в BigInteger. Поэтому мне было интересно, можно ли преобразовать double / long в BigInteger?


import java.math.*;
import java.util.Scanner;

public class LargePow2{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.print("n = ?");
        int n = sc.nextInt();
        System.out.println("2^" + n + " is \n" + pow2(n));
    }

    public static BigInteger pow2(long n){
        BigInteger result = BigInteger.ONE;
        result = Math.pow(n, 2);
        return result;
    }
}

Ответы [ 2 ]

1 голос
/ 26 мая 2020

Может быть, лучше избегать функции Math.pow (), потому что она возвращает результат как double, что менее точно в случае очень больших чисел.

    public static BigInteger pow2(long n){
        return BigInteger.valueOf(n).pow(2);
    }
0 голосов
/ 26 мая 2020

вы можете преобразовать double в BigDecimal, а затем в BigInteger:

BigInteger result = BigDecimal.valueOf(Math.pow(n, 2)).toBigInteger();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...