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:
- Count the number of trailing zeroes.
- After removing the trailing zeroes, if the remaining N cannot be expressed as a power of 2, print NO.
- 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)
Recommended Articles