Check if a given number can be represented in given a no. of digits in any base in C++

C++Server Side ProgrammingProgramming

Suppose we have a number n, and number of digits d. We have to check whether the number n can be represented as d digit number in any base from 2 to 32. Suppose the number n is 8, and d = 4, then this can be represented as 1000 in binary, here the d is 4.

The idea is to check all bases one by one from 2 to 32. We can follow these steps to check the base.

  • If the number is smaller than base, and digit is 1, then return true
  • if digit is more than one and number is more than base, then remove the last digit from the number by doing num/base, thus reduce the number of digits, then recursively do this again and again.
  • Otherwise return false.

Example

 Live Demo

#include <iostream>
using namespace std;
bool isRepresentedInDDigits(int num, int d, int base) {
   if (d==1 && num < base)
      return true;
   if (d > 1 && num >= base)
      return isRepresentedInDDigits(num/base, --d, base);
      return false;
}
bool checkNumber(int num, int d) {
   // Check for all bases one by one
   for (int base=2; base<=32; base++)
      if (isRepresentedInDDigits(num, d, base))
         return true;
         return false;
}
int main() {
   int num = 8;
   int dig = 2;
   if(checkNumber(num, dig))
      cout << "Can be represented";
   else
      cout << "Can not be represented";
}

Output

Can be represented
raja
Published on 22-Oct-2019 11:10:21
Advertisements