Given a number n .The task is to find the number obtained when the number is raised to the power of its own reverse.
Examples:
Input : n = 2
Output: 4
Explanation: Number 2 raised to the power of its reverse 2 gives 4.Input : n = 10
Output: 10
Explanation: 1001 gives us the result as 10.
Table of Content
[Naive Approach] - Multiply One by One - O(r) Time and O(1) Space
The idea is to traverse a loop from 1 to r (reverse) and multiply the result (initialized to 1) with n in each iteration.
Follow the below given steps:
- Create a variable res and initialize it to 1 to store the final result.
- Then, start a loop from 1 and it goes till r.
- Multiply the variable res with n.
- Return the result res .
#include <iostream>
using namespace std;
// Function to reverse the digits of a number n
int reverse(int n) {
int rev = 0;
while (n > 0) {
rev = rev * 10 + n % 10;
n /= 10;
}
return rev;
}
// Iterative function to calculate x^r using a for loop
int power(int x, int r) {
int result = 1;
for (int i = 0; i < r; i++) {
result *= x;
}
return result;
}
int main() {
int n = 10; // Original number
int r = reverse(n); // Reverse of n
cout << power(n, r) << endl;
return 0;
}
public class GfG {
// Function to reverse the digits of a number n
static int reverse(int n) {
int rev = 0;
while (n > 0) {
rev = rev * 10 + n % 10;
n /= 10;
}
return rev;
}
// Iterative function to calculate x^r using a for loop
static int power(int x, int r) {
int result = 1;
for (int i = 0; i < r; i++) {
result *= x;
}
return result;
}
public static void main(String[] args) {
int n = 10; // Original number
int r = reverse(n); // Reverse of n
System.out.println(power(n, r));
}
}
# Function to reverse the digits of a number n
def reverse(n):
rev = 0
while n > 0:
rev = rev * 10 + n % 10
n //= 10
return rev
# Iterative function to calculate x^r using a for loop
def power(x, r):
result = 1
for _ in range(r):
result *= x
return result
if __name__ == "__main__":
n = 10 # Original number
r = reverse(n) # Reverse of n
print(power(n, r))
using System;
class GFG
{
// Function to reverse the digits of a number n
static int Reverse(int n)
{
int rev = 0;
while (n > 0)
{
rev = rev * 10 + n % 10;
n /= 10;
}
return rev;
}
// Iterative function to calculate x^r using a for loop
static int Power(int x, int r)
{
int result = 1;
for (int i = 0; i < r; i++)
{
result *= x;
}
return result;
}
static void Main()
{
int n = 10; // Original number
int r = Reverse(n); // Reverse of n
Console.WriteLine(Power(n, r));
}
}
// Function to reverse the digits of a number n
function reverse(n) {
let rev = 0;
while (n > 0) {
rev = rev * 10 + n % 10;
n = Math.floor(n / 10);
}
return rev;
}
// Iterative function to calculate x^r using a for loop
function power(x, r) {
let result = 1;
for (let i = 0; i < r; i++) {
result *= x;
}
return result;
}
// driver code
let n = 10; // Original number
let r = reverse(n); // Reverse of n
console.log(power(n, r));
Output
10
[Recursive Approach]: Calculate Power Using Recursion â O(r) Time and O(r) Space
To calculate n^r using recursion, we use the relation:
power(x, r) = x * power(x, r - 1), with the base case power(x, 0) = 1.
This approach makes r recursive calls, resulting in O(r) time and space complexity.
#include <iostream>
using namespace std;
// Function to reverse the digits of a number n
int reverse(int n) {
int rev = 0;
while (n > 0) {
rev = rev * 10 + n % 10;
n /= 10;
}
return rev;
}
// Recursive function to calculate x^r
int power(int x, int r) {
if (r == 0)
return 1;
return x * power(x, r - 1);
}
int main() {
int n = 10; // Original number
int r = reverse(n); // Reverse of n
cout << power(n, r) << endl;
return 0;
}
import java.io.*;
class GFG {
// Function to reverse the digits of a number n
static int reverse(int n) {
int rev = 0;
while (n > 0) {
rev = rev * 10 + n % 10;
n /= 10;
}
return rev;
}
// Recursive function to calculate x^r
static int power(int x, int r) {
if (r == 0)
return 1;
return x * power(x, r - 1);
}
public static void main(String[] args) {
int n = 10; // Original number
int r = reverse(n); // Reverse of n
System.out.println(power(n, r));
}
}
# Function to reverse the digits of a number n
def reverse(n):
rev = 0
while n > 0:
rev = rev * 10 + n % 10
n //= 10
return rev
# Recursive function to calculate x^r
def power(x, r):
if r == 0:
return 1
return x * power(x, r - 1)
if __name__ == "__main__":
n = 10 # Original number
r = reverse(n) # Reverse of n
print(power(n, r))
using System;
public class GFG{
// Function to reverse the digits of a number n
static int Reverse(int n)
{
int rev = 0;
while (n > 0)
{
rev = rev * 10 + n % 10;
n /= 10;
}
return rev;
}
// Recursive function to calculate x^r
static int Power(int x, int r)
{
if (r == 0)
return 1;
return x * Power(x, r - 1);
}
static void Main()
{
int n = 10; // Original number
int r = Reverse(n); // Reverse of n
Console.WriteLine(Power(n, r));
}
}
// Function to reverse the digits of a number n
function reverse(n) {
let rev = 0;
while (n > 0) {
rev = rev * 10 + n % 10;
n = Math.floor(n / 10);
}
return rev;
}
// Recursive function to calculate x^r
function power(x, r) {
if (r === 0)
return 1;
return x * power(x, r - 1);
}
// driver code
let n = 10; // Original number
let r = reverse(n); // Reverse of n
console.log(power(n, r));
<?php
// Function to reverse the digits of a number n
function reverse($n) {
$rev = 0;
while ($n > 0) {
$rev = $rev * 10 + $n % 10;
$n = intdiv($n, 10);
}
return $rev;
}
// Recursive function to calculate x^r
function power($x, $r) {
if ($r == 0)
return 1;
return $x * power($x, $r - 1);
}
$n = 10; // Original number
$r = reverse($n); // Reverse of n
echo power($n, $r) . "\n";
?>
Output
10
[Expected Approach] - Using Bit Manipulation - O(log r) Time and O(1) Space
The idea is to use binary exponentiation (also known as âexponentiation by squaringâ) to compute the result in logarithmic time.
- Every number can be written as the sum of powers of 2
- Traverse through all the bits of r from LSB (Least Significant Bit) to MSB (Most Significant Bit) in O(log n) time. In each iteration, make the multiplier x as square of x.,
#include <iostream>
using namespace std;
// Function to reverse the digits of a number
int reverse(int n) {
int rev = 0;
while (n > 0) {
rev = rev * 10 + n % 10;
n /= 10;
}
return rev;
}
// Function to compute power using binary exponentiation
int power(int n, int r) {
int res = 1;
int x = n;
while (r > 0) {
if (r & 1) {
res = res * x;
}
x = x * x;
r >>= 1;
}
return res;
}
int main() {
int n = 10;
int r = reverse(n);
cout << power(n, r);
return 0;
}
import java.util.*;
public class GFG{
// Function to reverse the digits of a number
static int reverse(int n) {
int rev = 0;
while (n > 0) {
rev = rev * 10 + n % 10;
n /= 10;
}
return rev;
}
// Function to compute power using binary exponentiation
static int power(int n, int r) {
int res = 1;
int x = n;
while (r > 0) {
if ((r & 1) == 1) {
res = res * x;
}
x = x * x;
r >>= 1;
}
return res;
}
public static void main(String[] args) {
int n = 10;
int r = reverse(n);
System.out.println(power(n, r));
}
}
# Function to reverse the digits of a number
def reverse(n):
rev = 0
while n > 0:
rev = rev * 10 + n % 10
n //= 10
return rev
# Function to compute power using binary exponentiation
def power(n, r):
res = 1
x = n
while r > 0:
if r & 1:
res = res * x
x = x * x
r >>= 1
return res
if __name__=="__main__":
n = 10
r = reverse(n)
print(power(n, r))
using System;
class GFG {
// Function to reverse the digits of a number
static int reverse(int n) {
int rev = 0;
while (n > 0) {
rev = rev * 10 + n % 10;
n /= 10;
}
return rev;
}
// Function to compute power using binary exponentiation
static int power(int n, int r) {
int res = 1;
int x = n;
while (r > 0) {
if ((r & 1) == 1) {
res = res * x;
}
x = x * x;
r >>= 1;
}
return res;
}
static void Main() {
int n = 10;
int r = reverse(n);
Console.WriteLine(power(n, r));
}
}
"use strict";
// Function to reverse the digits of a number
function reverse(n) {
let rev = 0;
while (n > 0) {
rev = rev * 10 + n % 10;
n = Math.floor(n / 10);
}
return rev;
}
// Function to compute power using binary exponentiation
function power(n, r) {
let res = 1;
let x = n;
while (r > 0) {
if (r & 1) {
res = res * x;
}
x = x * x;
r >>= 1;
}
return res;
}
// driver code
let n = 10;
let r = reverse(n);
console.log(power(n, r));
Output
10