 Open in App
Not now

# Check if a number N can be expressed in base B

• Last Updated : 16 Apr, 2021

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 ` `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``;` `    ``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

 ``

Output:

`Yes`

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

My Personal Notes arrow_drop_up
Related Articles