Related Articles
Check if N can be obtained from 1 by repetitively multiplying by 10 or 20
• Difficulty Level : Hard
• Last Updated : 22 Apr, 2021

Given an integer N, the task is to determine whether it is possible to obtain the value N from 1 by repetitively multiplying by 10 or 20. Print Yes if possible or No otherwise.
Examples:

Input: N = 200
Output: YES
Explanation:
1 * 10 -> 10 * 20 -> 200
Input: N = 90
Output: NO

Approach:
Follow the steps below to solve the problem:

1. Count the number of trailing zeroes.
2. After removing the trailing zeroes, if the remaining N cannot be expressed as a power of 2, print NO.
3. Otherwise, if log2N <= Count of trailing zeroes, print Yes.

Below is the implementation of the above approach:

## C++

 `// C++ program to check if N``// can be obtained from 1 by``// repetitive multiplication``// by 10 or 20``#include``using` `namespace` `std;` `// Function to check if N can``// be obtained or not``void` `Is_possible(``long` `long` `int` `N)``{``    ``int` `C = 0;``    ``int` `D = 0;``    ` `    ``// Count and remove trailing``    ``// zeroes``    ``while` `(N % 10 == 0)``    ``{``        ``N = N / 10;``        ``C += 1;``    ``}``    ` `    ``// Check if remaining``    ``// N is a power of 2``    ``if``(``pow``(2, (``int``)log2(N)) == N)``    ``{``        ``D = (``int``)log2(N);``        ` `        ``// To check the condition``        ``// to print YES or NO``        ``if` `(C >= D)``            ``cout << ``"YES"``;``        ``else``            ``cout << ``"NO"``;``    ``}``    ``else``        ``cout << ``"NO"``;``}` `// Driver code``int` `main()``{``    ``long` `long` `int` `N = 2000000000000;``    ` `    ``Is_possible(N);``}` `// This code is contributed by Stream_Cipher`

## Java

 `// Java program to check if N``// can be obtained from 1 by``// repetitive multiplication``// by 10 or 20``import` `java.util.*;` `class` `GFG{``    ` `static` `void` `Is_possible(``long` `N)``{``    ``long` `C = ``0``;``    ``long` `D = ``0``;``    ` `    ``// Count and remove trailing``    ``// zeroes``    ``while` `(N % ``10` `== ``0``)``    ``{``        ``N = N / ``10``;``        ``C += ``1``;``    ``}``    ` `    ``// Check if remaining``    ``// N is a power of 2``    ``if``(Math.pow(``2``, (``long``)(Math.log(N) /``                         ``(Math.log(``2``)))) == N)``    ``{``        ``D = (``long``)(Math.log(N) / (Math.log(``2``)));``        ` `        ``// To check the condition``        ``// to prlong YES or NO``        ``if` `(C >= D)``            ``System.out.print(``"YES"``);``        ``else``            ``System.out.print(``"NO"``);``    ``}``    ``else``        ``System.out.print(``"NO"``);``}` `// Driver code``public` `static` `void` `main(String args[])``{``    ``long` `N = 2000000000000L;``    ``Is_possible(N);``}``}` `// This code is contributed by Stream_Cipher`

## Python

 `# Python Program to check if N``# can be obtained from 1 by``# repetitive multiplication``# by 10 or 20` `import` `math` `# Function to check if N can``# be obtained or not``def` `Is_possible(N):` `    ``C ``=` `0``    ``D ``=` `0` `    ``# Count and remove trailing``    ``# zeroes``    ``while` `( N ``%` `10` `=``=` `0``):``        ``N ``=` `N ``/` `10``        ``C ``+``=` `1` `    ``# Check if remaining``    ``# N is a power of 2``    ``if` `( math.log(N, ``2``)``    ``-` `int``(math.log(N, ``2``)) ``=``=` `0``):` `        ``D ``=` `int``(math.log(N, ``2``))` `        ``# To check the condition``        ``# to print YES or NO``        ``if` `(C >``=` `D):``            ``print``(``"YES"``)``            ` `        ``else``:``            ``print``(``"NO"``)``    ` `    ``else``:``        ``print``(``"NO"``)``            ` `# Driver Program``N ``=` `2000000000000``Is_possible(N)`

## C#

 `// C# program to check if N``// can be obtained from 1 by``// repetitive multiplication``// by 10 or 20``using` `System;` `class` `GFG{``    ` `static` `void` `Is_possible(``long` `N)``{``    ``long` `C = 0;``    ``long` `D = 0;``    ` `    ``// Count and remove trailing``    ``// zeroes``    ``while` `(N % 10 == 0)``    ``{``        ``N = N / 10;``        ``C += 1;``    ``}``    ` `    ``// Check if remaining``    ``// N is a power of 2``    ``if``(Math.Pow(2, (``long``)(Math.Log(N) /``                         ``(Math.Log(2)))) == N)``    ``{``        ``D = (``long``)(Math.Log(N) / (Math.Log(2)));``        ` `        ``// To check the condition``        ``// to prlong YES or NO``        ``if` `(C >= D)``            ``Console.WriteLine(``"YES"``);``        ``else``            ``Console.WriteLine(``"NO"``);``    ``}``    ``else``        ``Console.WriteLine(``"NO"``);``}` `// Driver Code``public` `static` `void` `Main()``{``    ``long` `N = 2000000000000L;``    ` `    ``Is_possible(N);``}``}` `// This code is contributed by Stream_Cipher`

## Javascript

 ``
Output:
`YES`

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

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up