📌  相关文章
📜  通过重复乘以10或20来检查是否可以从1获得N

📅  最后修改于: 2021-04-30 03:09:43             🧑  作者: Mango

给定整数N ,任务是确定是否可以通过重复乘以10或20从1获得值N。
例子:

方法:
请按照以下步骤解决问题:

  1. 计算尾随零的数量。
  2. 除去尾随的零后,如果剩余的N不能表示为2的幂,则打印NO
  3. 否则,如果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)