Recursive sum of digit in n^x, where n and x are very large in C++

C++Server Side ProgrammingProgramming

We are given positive integer variables as ‘num’ and ‘x’. The task is to recursively calculate the num ^ x then add the digits of a resultant number till the single digit isn’t achieved and the resultant single digit will be the output.

Let us see various input output scenarios for this −

Input − int num = 2345, int x = 3

Output − Recursive sum of digit in n^x, where n and x are very large are: 8

Explanation − we are given positive integer values as num and x with the values as 2345 and power as 3. Firstly, calculate 2345 ^ 3 i.e. 12,895,213,625. Now , we will add these digits i.e. 1 + 2 + 8 + 9 + 5 + 2 + 1 + 3 + 6 + 2 + 5 i.e. 44. Now we will add 4 + 4 i.e. 8. Since we have achieved the single digit therefore, output is 8.

Input − int num = 3, int x = 3

Output − Recursive sum of digit in n^x, where n and x are very large are: 9

Explanation − we are given positive integer values as num and x with the values as 3 and power as 3. Firstly, calculate 3 ^ 3 i.e. 9. Since we have achieved the single digit therefore, output is 9 and no further calculation is required.

Approach used in the below program is as follows

  • Input an integer variable as num and x and pass the data to the function Recursive_Digit(num, x) for further processing.

  • Inside the function Recursive_Digit(num, x)

    • Declare variable ‘total’ as long and set it to call the function total_digits(num) which will return the digit sum of a number passed as an argument.

    • Declare variable as temp of type long and set it with power % 6

    • Check IF total = 3 OR total = 6 AND power > 1 then return 9.

    • ELSE IF, power = 1 then return total.

    • ELSE IF, power = 0 then return 1.

    • ELSE IF, temp - 0 then return call to total_digits((long)pow(total, 6))

    • ELSE, return total_digits((long)pow(total, temp)).

  • Inside the function long total_digits(long num)

    • Check IF num = 0 then return 0. Check IF, num % 9 = 0 then return 9.

    • Else, return num % 9

Example

#include <bits/stdc++.h>
using namespace std;
long total_digits(long num){
   if(num == 0){
      return 0;
   }
   if(num % 9 == 0){
      return 9;
   }
   else{
      return num % 9;
   }
}
long Recursive_Digit(long num, long power){
   long total = total_digits(num);
   long temp = power % 6;
   if((total == 3 || total == 6) & power > 1){
      return 9;
   }
   else if (power == 1){
      return total;
   }
   else if (power == 0){
      return 1;
   }
   else if (temp == 0){
      return total_digits((long)pow(total, 6));
   }
   else{
      return total_digits((long)pow(total, temp));
   }
}
int main(){
   int num = 2345;
   int x = 98754;
   cout<<"Recursive sum of digit in n^x, where n and x are very large are: "<<Recursive_Digit(num, x);
   return 0;
}

Output

If we run the above code it will generate the following Output

Recursive sum of digit in n^x, where n and x are very large are: 1
raja
Published on 02-Nov-2021 05:59:09

Advertisements