Skip to content
Related Articles

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<bits/stdc++.h>
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




<script>
// Java  script program to check if N
// can be obtained from 1 by
// repetitive multiplication
// by 10 or 20
 
function Is_possible( N)
{
    let  C = 0;
    let  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, (Math.log(N) /
                        (Math.log(2)))) == N)
    {
        D = (Math.log(N) / (Math.log(2)));
         
        // To check the condition
        // to prlong YES or NO
        if (C >= D)
            document.write("YES");
        else
            document.write("NO");
    }
    else
        document.write("NO");
}
 
// Driver code
 
    let  N = 2000000000000;
    Is_possible(N);
 
//this code is contributed by sravan kumar
</script>
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
Recommended Articles
Page :