В этой статье мы расскажем о том, как выполнять возведение в степень в языке программирования 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 момента:
- Условие выхода из рекурсии. Если возведенное значение степени достигает единицы, нас выбрасывает назад.
- Непосредственный механизм умножения 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
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 int
s (a power will then also always result in an int
).
Is there something as simple as a**b
like in Python?
Neuron
4,9945 gold badges38 silver badges57 bronze badges
asked Nov 9, 2011 at 20:40
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
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
4,9945 gold badges38 silver badges57 bronze badges
answered Nov 9, 2011 at 20:47
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
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);
answered Nov 9, 2011 at 20:44
Petar MinchevPetar Minchev
46.7k11 gold badges103 silver badges119 bronze badges
7
Google Guava has math utilities for integers.
IntMath
answered Aug 30, 2014 at 13:06
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
4,0212 gold badges40 silver badges63 bronze badges
answered Mar 7, 2013 at 0:21
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
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
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
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
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
There some issues with pow method:
- 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
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
4,9945 gold badges38 silver badges57 bronze badges
answered Feb 15, 2018 at 7:34
1
answered Jul 13, 2020 at 23:35
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
2,1446 gold badges32 silver badges47 bronze badges
answered Oct 11, 2020 at 6:05
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
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
5,93314 gold badges30 silver badges57 bronze badges
answered Jun 9, 2022 at 13:18
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
Ответы
Самый простой способ в Java возвести число в степень – это использовать статический метод pow()
класса Math
. Метод принимает два параметра. Первый – число, которое возводим с степень. Второй – степень, в которую нужно возвести. Метод возвращает число типа double
// 2 в степени 3
Math.pow(2, 3); // 8.0
// 4 в квадрате
Math.pow(4, 2); // 16.0
0
0
Добавьте ваш ответ
Рекомендуемые курсы
69 часов
Старт в любое время
35 часов
Старт в любое время
11 часов
Старт в любое время