# Smallest number whose square has N digits

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

Examples:

Input: N = 2
Output: 4
Explanation:
32 = 9, which has 1 digit.
42 = 16, which has 2 digits.
Hence, 4 is the smallest number whose square has N digits.

Input: N = 3
Output: 10
Explanation:
102 = 100, which has 3 digits.

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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(√(10N))

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 = 100

Hence, these numbers form a series 1, 4, 10, 32, 100, 317, …….

Now, we need to find a formula for the Nth 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 Nth 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  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;  }

## 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

## 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

Output:

32


Time Complexity: O(log(N))
Auxiliary Space: O(1)

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : spp____