Как найти степень числа java

В этой статье мы расскажем о том, как выполнять возведение в степень в языке программирования Java. Читателю будут представлены 5 актуальных способов решения поставленной задачи.

Но прежде чем мы приступим к перечислению способов, давайте для начала вспомним, что же вообще представляет собой операция возведения:

Таким образом, речь идет об умножении числа на свое же значение n-е количество раз. Умножаемое число — это основание степени, а количество операций по умножению — показатель. Результат такого перемножения и будет называться возведением в степень. Для числа 33 результат будет равен 27, так как 3 х 3 х 3 = 27.

Теперь давайте рассмотрим, как это все реализуется в языке программирования Java.

Math pow

Использование класса Math — наиболее простой вариант решения поставленной задачи. На практике его применяют в большинстве ситуаций. Public class Math включает в себя математические методы, в том числе те, которые связаны с геометрией и тригонометрией. В этом классе методы реализованы в качестве статических, следовательно, есть возможность вызывать их через имя класса Math, не создавая объект класса.

Смотрим код:

public static int pow(int value, int powValue) {

   return (int) Math.pow(value, powValue);

}

Здесь пришлось использовать операцию приведения типа (int), т. к. этот метод класса Math осуществляет возвращение значения типа double (аргументы, по сути, тоже double, однако там применяется неявное приведение типа).

Теперь рассмотрим несколько дополнительных вариантов решения поставленной задачи.

Значение квадрата числа

Начнем с наиболее простого и напишем метод по возведению в квадрат:

Выполняем вызов в main:

public static void main(String[] args) {

   System.out.println(Solution.pow(7));

}

Как видим, возведение в квадрат сложностей не вызывает.

Число в степени

Чаще всего нам приходится работать не с квадратным значением числа, а с числом в определенной степени. Усложним предыдущий вариант и задействуем кастомное Java pow-значение:

public static void main(String[] args) {

   System.out.println(Solution.pow(7, 4));

}

public static int pow(int value, int powValue) {

   int result = 1;

   for (int a = 1; а <= powValue; а++) {

       result = result * value;

   }

   return result;

}

Алгоритм несложен: мы как будто задаем точку отсчета result, а потом умножаем его на значение value столько, сколько будет работать цикл с powValue.

Рекурсия

Следующий вариант является уже более экзотичным.

Вы должны знать, что рекурсия позволяет методу осуществлять вызов самого себя. В языке программирования Java такие методы тоже есть и называются они рекурсивными.

На практике рекурсивно можно решать многие алгоритмические задачи. Наша — не исключение. Давайте выполним возведение в степень рекурсивно:

Как видно из реализации, существуют 2 момента:

  1. Условие выхода из рекурсии. Если возведенное значение степени достигает единицы, нас выбрасывает назад.
    1. Непосредственный механизм умножения value на результат вызова того же самого метода, однако с powValue — 1.

Для совсем ленивых разработчиков существуют способы «из коробки». Рассмотрим один из них.

BigInteger

BigInteger — это класс, который обеспечивает хранение целых чисел произвольной величины. Здесь существуют разные арифметические методы, которые позволяют работать с числами.

Выполняем возведение посредством BigInteger в Java:

Тут все предельно просто и не нуждается в дополнительных разъяснениях, не так ли? Однако на сегодня все, теперь вы будете знать о разных способах, позволяющих возводить в степень в «Джава».  

По материалам: https://javarush.ru/groups/posts/2828-kak-vihpolnitjh-vozvedenie-v-stepenjh-v-java.

Интересуют более продвинутые знания по языку программирования Java? Добро пожаловать на курсы в Otus!

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    The java.lang.Math.pow() is used to calculate a number raise to the power of some other number. This function accepts two parameters and returns the value of first parameter raised to the second parameter. There are some special cases as listed below:

    • If the second parameter is positive or negative zero then the result will be 1.0.
    • If the second parameter is 1.0 then the result will be same as that of the first parameter.
    • If the second parameter is NaN then the result will also be NaN.
    • The function java.lang.Math.pow() always returns a double datatype.

    Syntax:

    public static double pow(double a, double b)
    Parameter:
    a : this parameter is the base
    b : this parameter is the exponent.
    Return :
    This method returns ab.

    Example 1: To show working of java.lang.Math.pow() method. 

    Java

    import java.lang.Math;

    class Gfg {

        public static void main(String args[])

        {

            double a = 30;

            double b = 2;

            System.out.println(Math.pow(a, b));

            a = 3;

            b = 4;

            System.out.println(Math.pow(a, b));

            a = 2.5;

            b = 6.9;

            System.out.println(Math.pow(a, b));

        }

    }

    Output:

    900.0
    81.0
    556.9113382296638

    Time Complexity: O(log(b))

    Auxiliary Space: O(1)

    Java

    import java.lang.Math;

    public class GFG {

        public static void main(String[] args)

        {

            double nan = Double.NaN;

            double result;

            result = Math.pow(2, nan);

            System.out.println(result);

            result = Math.pow(1254, 0);

            System.out.println(result);

            result = Math.pow(5, 1);

            System.out.println(result);

        }

    }

    Output:

    NaN
    1.0
    5.0

    Time Complexity: O(log(b))

    Auxiliary Space: O(1)

    Last Updated :
    06 Feb, 2023

    Like Article

    Save Article

    Описание

    Метод Math.pow() – возводит значение первого аргумента в степень второго аргумента, тем самым позволяет осуществить быстрое возведение в степень любых значений.

    Синтаксис

    double pow(double base, double exponent)
    

    Параметры

    Подробная информация о параметрах:

    • base – любой примитивный тип данных.
    • exponent – любой примитивный тип данных.

    Возвращаемое значение

    • В Java Math.pow() возвращает double значение первого аргумента, возведенное в степень второго аргумента.

    Пример 1: возведение числа в квадрат и куб

    Для возведения любого числа в квадрат с помощью метода Math.pow() необходимо в качестве второго аргумента использовать значение 2, а для возведения в куб – 3 и т.д. Заметьте, для вывода на экран целого значения используется “%.0f”, так как метод возвращает double значение.

    public class Test{ 
    
       public static void main(String args[]){
          // Возведение в квадрат числа 3  
          int a1 = 3;
          int b1 = 2;
          System.out.printf("Число 3 в квадрате равно %.0f n", Math.pow(a1, b1));
          
          // Возведение в квадрат числа 5  
          int a2 = 5;
          int b2 = 2;
          System.out.println("Число 5 в квадрате равно " + Math.pow(a2, b2));
          
          // Возведение в куб числа 2  
          int a3 = 2;
          int b3 = 3;
          System.out.printf("Число 2 в кубе равно %.0f n", Math.pow(a3, b3));
          
          // Возведение в куб числа 3  
          int a4 = 3;
          int b4 = 3;
          System.out.println("Число 3 в кубе равно " + Math.pow(a4, b4));
       }
    }
    

    Получим следующий результат:

    Число 3 в квадрате равно 9 
    Число 5 в квадрате равно 25.0
    Число 2 в кубе равно 8 
    Число 3 в кубе равно 27.0
    

    Пример 2: возведение числа в дробную степень

    public class Test{ 
    
       public static void main(String args[]){
          double x1 = 10.635;
          double y1 = 3.76;
          System.out.printf("Значение %.3f в степени %.2f равно %.3f n", x1, y1, Math.pow(x1, y1));
          System.out.printf("pow(%.3f, %.3f) = %.3f nn", x1, y1, Math.pow(x1, y1));
          
          int x2 = 2;
          double y2 = 3.76;
          System.out.printf("Значение 2 в степени %.2f равно %.3f n", y2, Math.pow(x2, y2));
          System.out.printf("pow(2, %.3f) = %.3f", y2, Math.pow(x2, y2));
       }
    }
    

    Получим следующий результат:

    Значение 10,635 в степени 3,76 равно 7253,256 
    pow(10,635, 3,760) = 7253,256 
    
    Значение 2 в степени 3,76 равно 13,548 
    pow(2, 3,760) = 13,548
    

    Пример 3: возведение числа в отрицательную степень

    public class Test{ 
    
       public static void main(String args[]){
          // Возведение числа в отрицательную дробную степень  
          double x = 7.525;
          double y = -1.49;
          System.out.printf("Значение %.3f в степени %.2f равно %.3f n", x, y, Math.pow(x, y));
          System.out.printf("pow(%.3f, %.3f) = %.3f nn", x, y, Math.pow(x, y));
          
          // Возведение числа в отрицательную степень 
          int a = 2;
          int b = -2;
          System.out.printf("Значение 2 в степени -2 равно %.2f n", Math.pow(a, b));
          System.out.printf("pow(2, -2) = %.2f", Math.pow(a, b));
       }
    }
    

    Получим следующий результат:

    Значение 7,525 в степени -1,49 равно 0,049 
    pow(7,525, -1,490) = 0,049 
    
    Значение 2 в степени -2 равно 0,25 
    pow(2, -2) = 0,25
    

    Пример 4: возведение отрицательного числа степень

    Заметьте, что при возведении отрицательного числа в дробную степень мы не получим результат (NaN).

    public class Test{ 
    
       public static void main(String args[]){
          // Возведение отрицательного дробного числа в степень  
          double x1 = -7.525;
          double y1 = 1.49;
          System.out.printf("Значение %.3f в степени %.2f равно %.3f n", x1, y1, Math.pow(x1, y1));
          System.out.printf("pow(%.3f, %.3f) = %.3f nn", x1, y1, Math.pow(x1, y1));
          
          double x2 = -7.525;
          double y2 = 2;
          System.out.printf("Значение %.3f в степени %.0f равно %.3f n", x2, y2, Math.pow(x2, y2));
          System.out.printf("pow(%.3f, %.0f) = %.3f nn", x2, y2, Math.pow(x2, y2));
          
          double x3 = -7.525;
          double y3 = 3;
          System.out.printf("Значение %.3f в степени %.0f равно %.3f n", x3, y3, Math.pow(x3, y3));
          System.out.printf("pow(%.3f, %.0f) = %.3f nn", x3, y3, Math.pow(x3, y3));
          
          // Возведение отрицательного числа в степень 
          int a1 = -2;
          int b1 = 2;
          System.out.printf("Значение -2 в степени 2 равно %.0f n", Math.pow(a1, b1));
          System.out.printf("pow(-2, 2) = %.0f nn", Math.pow(a1, b1));
          
          int a2 = -2;
          int b2 = 3;
          System.out.printf("Значение -2 в степени 3 равно %.0f n", Math.pow(a2, b2));
          System.out.printf("pow(-2, 3) = %.0f", Math.pow(a2, b2));
       }
    }
    

    Получим следующий результат:

    Значение -7,525 в степени 1,49 равно NaN 
    pow(-7,525, 1,490) = NaN 
    
    Значение -7,525 в степени 2 равно 56,626 
    pow(-7,525, 2) = 56,626 
    
    Значение -7,525 в степени 3 равно -426,108 
    pow(-7,525, 3) = -426,108 
    
    Значение -2 в степени 2 равно 4 
    pow(-2, 2) = 4 
    
    Значение -2 в степени 3 равно -8
    pow(-2, 3) = -8
    

    Пример 5: возведение каждого числа в квадрат и вывод на экран

    public class Test{ 
    
       public static void main(String args[]){
          int a = 1; // Начальное число
          int b = 10; // Конечное число
          
          // Возведение каждого числа в квадрат и вывод на экран
          for (int i = a; i <= b; i++){
              System.out.printf("Значение " + i + " в квадрате равно %.0f n", Math.pow(i, 2));
          }
       }
    }
    

    Получим следующий результат:

    Значение 1 в квадрате равно 1 
    Значение 2 в квадрате равно 4 
    Значение 3 в квадрате равно 9 
    Значение 4 в квадрате равно 16 
    Значение 5 в квадрате равно 25 
    Значение 6 в квадрате равно 36 
    Значение 7 в квадрате равно 49 
    Значение 8 в квадрате равно 64 
    Значение 9 в квадрате равно 81 
    Значение 10 в квадрате равно 100 
    

    Is there any other way in Java to calculate a power of an integer?

    I use Math.pow(a, b) now, but it returns a double, and that is usually a lot of work, and looks less clean when you just want to use ints (a power will then also always result in an int).

    Is there something as simple as a**b like in Python?

    Neuron's user avatar

    Neuron

    4,9945 gold badges38 silver badges57 bronze badges

    asked Nov 9, 2011 at 20:40

    Hidde's user avatar

    1

    When it’s power of 2. Take in mind, that you can use simple and fast shift expression 1 << exponent

    example:

    22 = 1 << 2 = (int) Math.pow(2, 2)
    210 = 1 << 10 = (int) Math.pow(2, 10)

    For larger exponents (over 31) use long instead

    232 = 1L << 32 = (long) Math.pow(2, 32)

    btw. in Kotlin you have shl instead of << so

    (java) 1L << 32 = 1L shl 32 (kotlin)

    answered Dec 19, 2017 at 19:22

    Stanislaw Baranski's user avatar

    Integers are only 32 bits. This means that its max value is 2^31 -1. As you see, for very small numbers, you quickly have a result which can’t be represented by an integer anymore. That’s why Math.pow uses double.

    If you want arbitrary integer precision, use BigInteger.pow. But it’s of course less efficient.

    Neuron's user avatar

    Neuron

    4,9945 gold badges38 silver badges57 bronze badges

    answered Nov 9, 2011 at 20:47

    JB Nizet's user avatar

    JB NizetJB Nizet

    675k91 gold badges1215 silver badges1250 bronze badges

    7

    Best the algorithm is based on the recursive power definition of a^b.

    long pow (long a, int b)
    {
        if ( b == 0)        return 1;
        if ( b == 1)        return a;
        if (isEven( b ))    return     pow ( a * a, b/2); //even a=(a^2)^b/2
        else                return a * pow ( a * a, b/2); //odd  a=a*(a^2)^b/2
    
    }
    

    Running time of the operation is O(logb).
    Reference:More information

    answered Jan 7, 2014 at 23:59

    Laakal's user avatar

    LaakalLaakal

    6076 silver badges16 bronze badges

    6

    No, there is not something as short as a**b

    Here is a simple loop, if you want to avoid doubles:

    long result = 1;
    for (int i = 1; i <= b; i++) {
       result *= a;
    }
    

    If you want to use pow and convert the result in to integer, cast the result as follows:

    int result = (int)Math.pow(a, b);
    

    Kasun Siyambalapitiya's user avatar

    answered Nov 9, 2011 at 20:44

    Petar Minchev's user avatar

    Petar MinchevPetar Minchev

    46.7k11 gold badges103 silver badges119 bronze badges

    7

    Google Guava has math utilities for integers.
    IntMath

    Community's user avatar

    answered Aug 30, 2014 at 13:06

    ant's user avatar

    antant

    1412 silver badges2 bronze badges

    import java.util.*;
    
    public class Power {
    
        public static void main(String args[])
        {
            Scanner sc=new Scanner(System.in);
            int num = 0;
            int pow = 0;
            int power = 0;
    
            System.out.print("Enter number: ");
            num = sc.nextInt();
    
            System.out.print("Enter power: ");
            pow = sc.nextInt();
    
            System.out.print(power(num,pow));
        }
    
        public static int power(int a, int b)
        {
            int power = 1;
    
            for(int c = 0; c < b; c++)
                power *= a;
    
            return power;
        }
    
    }
    

    cavpollo's user avatar

    cavpollo

    4,0212 gold badges40 silver badges63 bronze badges

    answered Mar 7, 2013 at 0:21

    mark lamban's user avatar

    2

    Guava’s math libraries offer two methods that are useful when calculating exact integer powers:

    pow(int b, int k) calculates b to the kth the power, and wraps on overflow

    checkedPow(int b, int k) is identical except that it throws ArithmeticException on overflow

    Personally checkedPow() meets most of my needs for integer exponentiation and is cleaner and safter than using the double versions and rounding, etc. In almost all the places I want a power function, overflow is an error (or impossible, but I want to be told if the impossible ever becomes possible).

    If you want get a long result, you can just use the corresponding LongMath methods and pass int arguments.

    answered Jun 2, 2016 at 23:48

    BeeOnRope's user avatar

    BeeOnRopeBeeOnRope

    59.2k15 gold badges201 silver badges375 bronze badges

    Well you can simply use Math.pow(a,b) as you have used earlier and just convert its value by using (int) before it. Below could be used as an example to it.

    int x = (int) Math.pow(a,b);
    

    where a and b could be double or int values as you want.
    This will simply convert its output to an integer value as you required.

    answered Jul 4, 2017 at 13:38

    Shubham Srivastava's user avatar

    5

    A simple (no checks for overflow or for validity of arguments) implementation for the repeated-squaring algorithm for computing the power:

    /** Compute a**p, assume result fits in a 32-bit signed integer */ 
    int pow(int a, int p)
    {
        int res = 1;
        int i1 = 31 - Integer.numberOfLeadingZeros(p); // highest bit index
        for (int i = i1; i >= 0; --i) {
            res *= res;
            if ((p & (1<<i)) > 0)
                res *= a;
        }
        return res;
    }
    

    The time complexity is logarithmic to exponent p (i.e. linear to the number of bits required to represent p).

    answered Jul 18, 2017 at 23:08

    Michail Alexakis's user avatar

    I managed to modify(boundaries, even check, negative nums check) Qx__ answer. Use at your own risk. 0^-1, 0^-2 etc.. returns 0.

    private static int pow(int x, int n) {
            if (n == 0)
                return 1;
            if (n == 1)
                return x;
            if (n < 0) { // always 1^xx = 1 && 2^-1 (=0.5 --> ~ 1 )
                if (x == 1 || (x == 2 && n == -1))
                    return 1;
                else
                    return 0;
            }
            if ((n & 1) == 0) { //is even 
                long num = pow(x * x, n / 2);
                if (num > Integer.MAX_VALUE) //check bounds
                    return Integer.MAX_VALUE; 
                return (int) num;
            } else {
                long num = x * pow(x * x, n / 2);
                if (num > Integer.MAX_VALUE) //check bounds
                    return Integer.MAX_VALUE;
                return (int) num;
            }
        }
    

    answered Aug 26, 2015 at 11:50

    Smarty77's user avatar

    Smarty77Smarty77

    1,1863 gold badges14 silver badges29 bronze badges

    base is the number that you want to power up, n is the power, we return 1 if n is 0, and we return the base if the n is 1, if the conditions are not met, we use the formula base*(powerN(base,n-1)) eg: 2 raised to to using this formula is : 2(base)*2(powerN(base,n-1)).

    public int power(int base, int n){
       return n == 0 ? 1 : (n == 1 ? base : base*(power(base,n-1)));
    }
    

    answered Aug 2, 2018 at 2:10

    Morriss's user avatar

    There some issues with pow method:

    1. We can replace (y & 1) == 0; with y % 2 == 0
      bitwise operations always are faster.

    Your code always decrements y and performs extra multiplication, including the cases when y is even. It’s better to put this part into else clause.

    public static long pow(long x, int y) {
            long result = 1;
            while (y > 0) {
                if ((y & 1) == 0) {
                    x *= x;
                    y >>>= 1;
                } else {
                    result *= x;
                    y--;
                }
            }
            return result;
        }
    

    answered May 18, 2020 at 16:12

    Yerassyl Aben's user avatar

    Use the below logic to calculate the n power of a.

    Normally if we want to calculate n power of a. We will multiply ‘a’ by n number of times.Time complexity of this approach will be O(n)
    Split the power n by 2, calculate Exponentattion = multiply ‘a’ till n/2 only. Double the value. Now the Time Complexity is reduced to O(n/2).

    public  int calculatePower1(int a, int b) {
        if (b == 0) {
            return 1;
        }
    
        int val = (b % 2 == 0) ? (b / 2) : (b - 1) / 2;
    
        int temp = 1;
        for (int i = 1; i <= val; i++) {
            temp *= a;
        }
    
        if (b % 2 == 0) {
            return temp * temp;
        } else {
            return a * temp * temp;
        }
    }
    

    Neuron's user avatar

    Neuron

    4,9945 gold badges38 silver badges57 bronze badges

    answered Feb 15, 2018 at 7:34

    Yuvaraj Ram's user avatar

    1

    answered Jul 13, 2020 at 23:35

    Noel Yap's user avatar

    Noel YapNoel Yap

    18.5k21 gold badges91 silver badges142 bronze badges

    import java.util.Scanner;
    
    class Solution {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int t = sc.nextInt();
    
            for (int i = 0; i < t; i++) {
    
                try {
                    long x = sc.nextLong();
                    System.out.println(x + " can be fitted in:");
                    if (x >= -128 && x <= 127) {
                        System.out.println("* byte");
                    }
                    if (x >= -32768 && x <= 32767) {
                        //Complete the code
                        System.out.println("* short");
                        System.out.println("* int");
                        System.out.println("* long");
                    } else if (x >= -Math.pow(2, 31) && x <= Math.pow(2, 31) - 1) {
                        System.out.println("* int");
                        System.out.println("* long");
                    } else {
                        System.out.println("* long");
                    }
                } catch (Exception e) {
                    System.out.println(sc.next() + " can't be fitted anywhere.");
                }
    
            }
        }
    }
    

    aboger's user avatar

    aboger

    2,1446 gold badges32 silver badges47 bronze badges

    answered Oct 11, 2020 at 6:05

    sudarshan padale's user avatar

    int arguments are acceptable when there is a double paramter. So Math.pow(a,b) will work for int arguments. It returns double you just need to cast to int.

    int i =  (int) Math.pow(3,10); 
    

    answered Feb 19, 2022 at 5:49

    Sandeep Dixit's user avatar

    Without using pow function and +ve and -ve pow values.

    public class PowFunction {
    
        public static void main(String[] args) {
            int x = 5;
            int y = -3;
            System.out.println( x + " raised to the power of " + y + " is " + Math.pow(x,y));
            float temp =1;
            if(y>0){
                for(;y>0;y--){
                    temp = temp*x;
                }
            } else {
                for(;y<0;y++){
                    temp = temp*x;
                }
                temp = 1/temp;
            }
            System.out.println("power value without using pow method.  :: "+temp);
        }
    }
    

    Laurel's user avatar

    Laurel

    5,93314 gold badges30 silver badges57 bronze badges

    answered Jun 9, 2022 at 13:18

    Baireddy Naresh's user avatar

    Unlike Python (where powers can be calculated by a**b) , JAVA has no such shortcut way of accomplishing the result of the power of two numbers.
    Java has function named pow in the Math class, which returns a Double value

    double pow(double base, double exponent)
    

    But you can also calculate powers of integer using the same function. In the following program I did the same and finally I am converting the result into an integer (typecasting). Follow the example:

    import java.util.*;
    import java.lang.*; // CONTAINS THE Math library
    public class Main{
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            int n= sc.nextInt(); // Accept integer n
            int m = sc.nextInt(); // Accept integer m
            int ans = (int) Math.pow(n,m); // Calculates n ^ m
            System.out.println(ans); // prints answers
        }
    }
    

    Alternatively,
    The java.math.BigInteger.pow(int exponent) returns a BigInteger whose value is (this^exponent). The exponent is an integer rather than a BigInteger. Example:

    import java.math.*;
    public class BigIntegerDemo {
    public static void main(String[] args) {
          BigInteger bi1, bi2; // create 2 BigInteger objects          
          int exponent = 2; // create and assign value to exponent
          // assign value to bi1
          bi1 = new BigInteger("6");
          // perform pow operation on bi1 using exponent
          bi2 = bi1.pow(exponent);
          String str = "Result is " + bi1 + "^" +exponent+ " = " +bi2;
          // print bi2 value
          System.out.println( str );
       }
    }
    

    answered Aug 21, 2017 at 7:25

    Pritam Mullick's user avatar

    Ответы

    Аватар пользователя Maksim Litvinov

    Самый простой способ в Java возвести число в степень – это использовать статический метод pow() класса Math. Метод принимает два параметра. Первый – число, которое возводим с степень. Второй – степень, в которую нужно возвести. Метод возвращает число типа double

    // 2 в степени 3
    Math.pow(2, 3); // 8.0
    
    // 4 в квадрате
    Math.pow(4, 2); // 16.0
    



    0



    0

    Добавьте ваш ответ

    Рекомендуемые курсы

    69 часов

    Старт в любое время

    35 часов

    Старт в любое время

    11 часов

    Старт в любое время

    Похожие вопросы

    Добавить комментарий