JavaRush /Java блог /Java Developer /Как выполнить возведение в степень в Java

Как выполнить возведение в степень в Java

Статья из группы Java Developer
Hello world! Погуглить что-нибудь или попросить помощи на форуме — обычное дело даже для опытного программиста. Но есть в разработке насколько базовые и простые темы, что их должен знать даже зеленый новичок. И вот одна из таких тем. Сегодня поговорим о том, как выполняется возведение в степень в языке Java. Как выполнить возведение в степень в Java - 1Представим на секундочку, что вам дали задачу: найти число в определенной степени. Звучит довольно просто, но каким образом реализовать решение? Давайте рассмотрим самый распространенный способ и несколько альтернативных. А прежде чем “нырнуть” в решения, вначале вспомним, что такое возведение числа в степень: Как выполнить возведение в степень в Java - 2Возведение в степень — это действие, при котором одно число умножается на само себя несколько раз. Число, которое умножается, называется основанием, а количество раз умножения — показателем. Ну а результат этого самоумножения основания называется возведением в степень. Например, для 8 — это 2 в третьей степени, поскольку 2х2x2=8. Возведение какого-либо числа во вторую степень указывает на то, что мы делаем его множителем два раза, и как правило эта степень называется квадратной. То есть 4 в квадрате = 4х4 = 16. Итак, память мы освежили, а теперь переходим непосредственно к способам применения pow в Java — метода для возведения в степень.
  1. Math pow

    Самый простой способ решения поставленной задачи — использовать класс Math. Это то решение, которое вы будете использовать в большинстве случаев.

    Как выполнить возведение в степень в Java - 3

    Класс Math содержит методы, связанные с тригонометрией, геометрией и другими аспектами математики. В нём методы реализованы как статические, поэтому можно сразу вызывать через имя класса Math без создания объекта класса.

    Как у нас будет выглядеть возведение в степень:

    
    public static int pow(int value, int powValue) {
       return (int) Math.pow(value, powValue);
    }
    

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

    А теперь — бонус: дополнительные варианты.

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

    Начнём, пожалуй, с самого простого.

    Вот так пишется метод для возведения в квадрат:

    
    public static int pow(int value){
       return value*value;
    }
    

    Вызов в main:

    
    public static void main(String[] args) {
       System.out.println(Solution.pow(7));
    }
    

    Вот и всё — ничего сложного и лишнего.

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

    Но число в квадрате — далеко не все, что нам понадобится. Чаще всего нам в работе будет нужно число именно в определенной степени, поэтому далее следует немного усложненный вариант, но уже с кастомным 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 i = 1; i <= powValue; i++) {
           result = result * value;
       }
       return result;
    }
    

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

  4. Рекурсия

    Следующий способ будет немного более экзотическим, но от этого не менее крутым.

    Как выполнить возведение в степень в Java - 4

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

    Многие, если не все алгоритмические задачки, можно решать рекурсивно. Данная тоже не будет исключением, поэтому давайте взглянем, как можно возвести число в определенную степень рекурсивным способом:

    
    public static int pow(int value, int powValue) {
       if (powValue == 1) {
           return value;
       } else {
           return value * pow(value, powValue - 1);
       }
    }
    

    Как видим, у нас есть два случая:

    1. Условие выхода из рекурсии, или другими словами, когда у нас значение степени достигнет единицы, нас начнёт выбрасывать назад.
    2. Сам механизм умножения value на результат вызова этого же метода, но с powValue - 1.

    Ну а теперь пришло время взглянуть на более ленивые способы, а именно — способы “из коробки”.

  5. BigInteger

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

    Как выполнить возведение в степень в Java - 5

    Подробнее о BigInteger можно почитать вот в этой статье.

    Итак, как же будет выглядеть возведение в степень с помощью BigInteger в Java?

    
    public static int pow(int value, int powValue) {
       BigInteger a = new BigInteger(String.valueOf(value));
      return a.pow(powValue).intValue();
    }
    

    Довольно просто и без заморочек, не правда ли?

Ну вот, на сегодня все! Теперь вы знаете о самых разных способах возведения в степень. Согласитесь, это была несложная тема :)
Комментарии (13)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Mark Barduk Уровень 2
1 февраля 2024
Стянуто под чистую отсюда https://otus.ru/journal/kak-vozvodit-v-stepen-v-java/
Roman Уровень 17
20 декабря 2023
Цитата: "Возведение в степень — это действие, при котором одно число умножается на само себя несколько раз. Число, которое умножается, называется основанием, а количество раз умножения — показателем. Ну а результат этого самоумножения основания называется возведением в степень." Показатель степени - количество раз взятия числа множителем, а количество раз умножения всегда на единицу меньше показателя степени. Ниже в статье есть правильное определение, но как-то вскользь и незаметно
kalkulator¹ Уровень 51
4 ноября 2022
package ua.javarush.task.pro.task09.task0906; import java.util.regex.Pattern; /* Двійковий конвертер */ public class Solution { public static void main(String[] args) { int decimalNumber = Integer.MAX_VALUE; System.out.println("Десяткове число " + decimalNumber + " дорівнює двійковому числу " + toBinary(decimalNumber)); String binaryNumber = "1111111111111111111111111111111"; System.out.println("Двійкове число " + binaryNumber + " дорівнює десятковому числу " + toDecimal(binaryNumber)); } public static String toBinary(int decimalNumber) { String binaryNumber = ""; if (decimalNumber <= 0) { return binaryNumber; } while(decimalNumber != 0){ binaryNumber = decimalNumber % 2 + binaryNumber; decimalNumber = decimalNumber /2; } return binaryNumber; } public static int toDecimal(String binaryNumber) { int decimalNumber = 0; if(binaryNumber == null) { return decimalNumber; } for(int i = 0; i < binaryNumber.length();i++){ int g = binaryNumber.length() - i; decimalNumber = (int)(decimalNumber + g * Math.pow(2, i)); } return decimalNumber; } } в консоль виводить правильно но задача на проходить по одному пункту toDesigma(String) це друга задача
Сергей Уровень 1
20 февраля 2022
Приведенный в статье рекурсивный метод нахождения степени произвольного целого числа не сработает если в качестве второго параметра передать ноль:

public static int pow(int value, int powValue) {
   if (powValue == 1) {
       return value;
   } else {
       return value * pow(value, powValue - 1);
   }
}
System.out.println(pow(10, 0)) //  Exception in thread "main" java.lang.StackOverflowError
hidden #1651932 Уровень 9
19 октября 2020
А теперь расскажите кто-нибудь как возводить числа в отрицательную степень без Math и прочего! =)
Oleg Savenko Уровень 41
16 июля 2020
Есть чудесный способ Math.exp( step * Math.log(x))
Dante Уровень 22
14 июля 2020
Сошел с ума пытаясь понять рекурсию. Когда 2 в 2 понятно. Дальше мозг был сломан