给定整数N ,任务是确定是否可以通过重复乘以10或20从1获得值N。
例子:
Input: N = 200
Output: YES
Explanation:
1 * 10 -> 10 * 20 -> 200
Input: N = 90
Output: NO
方法:
请按照以下步骤解决问题:
- 计算尾随零的数量。
- 除去尾随的零后,如果剩余的N不能表示为2的幂,则打印NO 。
- 否则,如果log 2 N <=尾随零的计数,则打印是。
下面是上述方法的实现:
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
输出:
YES
时间复杂度: O(log 10 (N))
辅助空间: O(1)