# 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#includeusing namespace std; // Function to check if N can// be obtained or notvoid 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 codeint 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 20import 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 codepublic 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 notdef 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 ProgramN = 2000000000000Is_possible(N)

## C#

 // C# program to check if N// can be obtained from 1 by// repetitive multiplication// by 10 or 20using 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 Codepublic 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)

My Personal Notes arrow_drop_up