Given a number **N**, the task is to find the smallest number whose square has **N** digits.

**Examples:**

Input:N = 2

Output:4

Explanation:

3^{2}= 9, which has 1 digit.

4^{2}= 16, which has 2 digits.

Hence, 4 is the smallest number whose square has N digits.

Input:N = 3

Output:10

Explanation:

10^{2}= 100, which has 3 digits.

**Naive Approach:** The simplest approach to solve the problem is to calculate the square of each number starting from and count the number of digits in its square. Print the first number whose square is obtained to be of N digits.

**Time Complexity:** O(√(10^{N}))

**Efficent Approach:** To solve the problem, we need to make the following observations:

The smallest number whose square has 1 digit = 1

The smallest number whose square has 2 digits = 4

The smallest number whose square has 3 digits = 10

The smallest number whose square has 4 digits = 32

The smallest number whose square has 5 digits = 100Hence, these numbers form a series 1, 4, 10, 32, 100, 317, …….

Now, we need to find a formula for the **N ^{th} term** of the series.

The terms of the series can be expressed in the following form:

If

N = 1, Smallest number possible is 1.

If

N = 2, Smallest number possible is 41.

If

N = 3, Smallest number possible is 10.

Hence, we can conclude that the N^{th} of the series can be expressed as

Hence, in order to solve the problem, we just need to calculate ** ceil(10^{(N – 1)/ 2})** for the given integer

**N**.

Below is the implementation of the above approach:

## C++

`// C++ Program to find the smallest ` `// number whose square has N digits ` ` ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to return smallest number ` `// whose square has N digits ` `int` `smallestNum(` `int` `N) ` `{ ` ` ` ` ` `// Calculate N-th term of the series ` ` ` `float` `x = ` `pow` `(10.0, (N - 1) / 2.0); ` ` ` `return` `ceil` `(x); ` `} ` ` ` `// Driver Code ` `int` `main() ` `{ ` ` ` `int` `N = 4; ` ` ` `cout << smallestNum(N); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java program for above approach ` `class` `GFG{ ` ` ` `// Function to return smallest number ` `// whose square has N digits ` `static` `int` `smallestNum(` `int` `N) ` `{ ` ` ` ` ` `// Calculate N-th term of the series ` ` ` `float` `x = (` `float` `)(Math.pow(` `10` `, (N - ` `1` `) / ` `2.0` `)); ` ` ` `return` `(` `int` `)(Math.ceil(x)); ` `} ` ` ` `// Driver code ` `public` `static` `void` `main(String[] args) ` `{ ` ` ` `int` `N = ` `4` `; ` ` ` `System.out.print(smallestNum(N)); ` `} ` `} ` ` ` `// This code is contributed by spp ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 Program to find the smallest ` `# number whose square has N digits ` `import` `math; ` ` ` `# Function to return smallest number ` `# whose square has N digits ` `def` `smallestNum(N): ` ` ` ` ` `# Calculate N-th term of the series ` ` ` `x ` `=` `pow` `(` `10.0` `, (N ` `-` `1` `) ` `/` `2.0` `); ` ` ` `return` `math.ceil(x); ` ` ` `# Driver Code ` `N ` `=` `4` `; ` `print` `(smallestNum(N)); ` ` ` `# This code is contributed by Code_mech ` |

*chevron_right*

*filter_none*

## C#

`// C# program for above approach ` `using` `System; ` `class` `GFG{ ` ` ` `// Function to return smallest number ` `// whose square has N digits ` `static` `int` `smallestNum(` `int` `N) ` `{ ` ` ` ` ` `// Calculate N-th term of the series ` ` ` `float` `x = (` `float` `)(Math.Pow(10, (N - 1) / 2.0)); ` ` ` `return` `(` `int` `)(Math.Ceiling(x)); ` `} ` ` ` `// Driver code ` `public` `static` `void` `Main() ` `{ ` ` ` `int` `N = 4; ` ` ` `Console.Write(smallestNum(N)); ` `} ` `} ` ` ` `// This code is contributed by Code_Mech ` |

*chevron_right*

*filter_none*

**Output:**

32

**Time Complexity:** O(log(N))

**Auxiliary Space:** O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.