Open In App

Check if a number N can be expressed in base B

Last Updated : 16 Apr, 2021
Improve
Improve
Like Article
Like
Save
Share
Report

Given a number N and any base B. The task is to check if N can be expressed in the form a1*b0 + a2*b1 + a3*b2 + ….+ a101*b100 where each coefficients a1, a2, a3…a101 are either 0, 1 or -1.

Examples:

Input: B = 3, N = 7 
Output: Yes 
Explanation: 
The number 7 can be expressed as 1 * 30 + (-1) * 31 + 1 * 32 = 1 – 3 + 9.

Input: B = 100, N = 50 
Output: No 
Explanation: 
There is no possible way to express the number. 
 

Approach: Below are the steps:

  • If the base B representation of N consists of only 0s and 1s then the answer exists.
  • If the above condition isn’t satisfied, then iterate from lower digit to higher ones and if the digit is not equal to 0 or 1, then try to subtract the appropriate power of B from it and increment higher digit.
  • If it becomes equal to -1, then we can subtract this power digit, if it becomes equal to 0, then simply ignore, in other cases, representing the number in the required form is not possible.

Below is the implementation for the above approach:

C++




// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to check if a number
// N can be expressed in base B
bool check(int n, int w)
{
    vector<int> a(105);
    int p = 0;
 
    // Check if n is greater than 0
    while (n > 0) {
        a[p++] = n % w;
        n /= w;
    }
 
    // Initialize a boolean variable
    bool flag = true;
 
    for (int i = 0; i <= 100; i++) {
 
        // Check if digit is 0 or 1
        if (a[i] == 0 || a[i] == 1)
            continue;
 
        // Subtract the appropriate
        // power of B from it and
        // increment higher digit
        else if (a[i] == w
                 || a[i] == w - 1)
            a[i + 1]++;
 
        else
            flag = false;
    }
 
    return flag;
}
 
// Driver Code
int main()
{
    // Given Number N and base B
    int B = 3, N = 7;
 
    // Function Call
    if (check(N, B))
        cout << "Yes";
    else
        cout << "No";
 
    return 0;
}


Java




// Java program for the above approach
class GFG{
 
// Function to check if a number
// N can be expressed in base B
static boolean check(int n, int w)
{
    int[] a = new int[105];
    int p = 0;
 
    // Check if n is greater than 0
    while (n > 0)
    {
        a[p++] = n % w;
        n /= w;
    }
 
    // Initialize a boolean variable
    boolean flag = true;
 
    for(int i = 0; i <= 100; i++)
    {
         
        // Check if digit is 0 or 1
        if (a[i] == 0 || a[i] == 1)
            continue;
 
        // Subtract the appropriate
        // power of B from it and
        // increment higher digit
        else if (a[i] == w || a[i] == w - 1)
            a[i + 1]++;
 
        else
            flag = false;
    }
    return flag;
}
 
// Driver Code
public static void main(String[] args)
{
     
    // Given number N and base B
    int B = 3, N = 7;
 
    // Function call
    if (check(N, B))
        System.out.print("Yes");
    else
        System.out.print("No");
}
}
 
// This code is contributed by gauravrajput1


Python3




# Python3 program for the above approach
 
# Function to check if a number
# N can be expressed in base B
def check(n, w):
     
    a = [0 for i in range(105)];
    p = 0
  
    # Check if n is greater than 0
    while (n > 0):
        a[p] = n % w
        p += 1
        n //= w
         
    # Initialize a boolean variable
    flag = True
  
    for i in range(101):
          
        # Check if digit is 0 or 1
        if (a[i] == 0 or a[i] == 1):
            continue
  
        # Subtract the appropriate
        # power of B from it and
        # increment higher digit
        elif (a[i] == w or a[i] == w - 1):
            a[i + 1] += 1
        else:
            flag = False
     
    return flag
 
# Driver code
if __name__=="__main__":
     
    # Given number N and base B
    B = 3
    N = 7
  
    # Function call
    if (check(N, B)):
        print("Yes")
    else:
        print("No")
 
# This code is contributed by rutvik_56


C#




// C# program for the above approach
using System;
 
class GFG{
 
// Function to check if a number
// N can be expressed in base B
static bool check(int n, int w)
{
    int[] a = new int[105];
    int p = 0;
 
    // Check if n is greater than 0
    while (n > 0)
    {
        a[p++] = n % w;
        n /= w;
    }
 
    // Initialize a bool variable
    bool flag = true;
 
    for(int i = 0; i <= 100; i++)
    {
         
        // Check if digit is 0 or 1
        if (a[i] == 0 || a[i] == 1)
            continue;
 
        // Subtract the appropriate
        // power of B from it and
        // increment higher digit
        else if (a[i] == w || a[i] == w - 1)
            a[i + 1]++;
 
        else
            flag = false;
    }
    return flag;
}
 
// Driver Code
public static void Main(String[] args)
{
     
    // Given number N and base B
    int B = 3, N = 7;
 
    // Function call
    if (check(N, B))
        Console.Write("Yes");
    else
        Console.Write("No");
}
}
 
// This code is contributed by amal kumar choubey


Javascript




<script>
// javascript program for the above approach   
 
    // Function to check if a number
    // N can be expressed in base B
    function check(n , w) {
        var a = Array(105).fill(0);
        var p = 0;
 
        // Check if n is greater than 0
        while (n > 0) {
            a[p++] = n % w;
            n /= w;
            n = parseInt(n);
        }
 
        // Initialize a boolean variable
        var flag = true;
 
        for (i = 0; i <= 100; i++) {
 
            // Check if digit is 0 or 1
            if (a[i] == 0 || a[i] == 1)
                continue;
 
            // Subtract the appropriate
            // power of B from it and
            // increment higher digit
            else if (a[i] == w || a[i] == w - 1)
                a[i + 1]++;
 
            else
                flag = false;
        }
        return flag;
    }
 
    // Driver Code
     
        // Given number N and base B
        var B = 3, N = 7;
 
        // Function call
        if (check(N, B))
            document.write("Yes");
        else
            document.write("No");
 
// This code is contributed by gauravrajput1
</script>


Output: 

Yes

 

Time Complexity: O(logBN) 
Auxiliary Space: O(1) 
 



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads