将给定的数字乘以 2,使其能够被 10 整除。


该问题陈述表明,我们只允许执行一种操作,即乘以给定的数字 2,使其能够被 10 整除。

我们将得到一个数字,例如 n。我们对给定数字唯一可以执行的操作是,我们可以将给定数字乘以 2,直到它能被 10 整除。我们需要确定通过重复将给定数字 n 乘以 2 来使数字能被 10 整除所需的最小操作次数。

否则,如果不可能将数字转换为能被 10 整除的数字,则打印 -1。

示例

输入: 25

输出: 1

因为将给定数字乘以 2 一次将得到 50,它可以被 10 整除。

输入: 20

输出: 0

给定数字已经可以被 10 整除,因此我们不需要对其执行任何操作。

输入: 2

输出: -1

因为重复将给定数字(即 2)乘以 2 从未得到一个能被 10 整除的数字。因此,输出将为 -1。

算法

我们将使用一个简单的数学算法来解决这个问题。以下是我们将用来解决这个问题的方法的逐步说明。

  • 任何数字只有当给定数字的个位数字为 0 时才能被 10 整除。

  • 因此,对于这个问题,我们将取给定数字的个位数字并检查它来解决这个问题。

  • 如果数字的最后一位数字为 0,则使给定数字能被 10 整除所需的最小操作次数为 0,因为它已经可以被 10 整除。

  • 如果数字的最后一位数字是 5,则所需的最小操作次数为 1,因为它乘以 2 一次后将被 10 整除。

  • 如果数字的最后一位数字是任何偶数或奇数(除了 0 或 5),将其乘以 2 将始终得到一个偶数,这使得不可能得到一个能被 10 整除的数字。因此,输出将为 -1,因为它不可能仅通过将其乘以 2 来将给定数字转换为能被 10 整除的数字。

方法

方法 1(使用 if-else-if)

在这种方法中,我们将使用相同的上述算法,使用 if-else-if 条件语句来获得我们的输出。

  • 我们将声明两个变量,第一个 **remainder** 用于存储给定数字的个位数字,**oprtn** 用于存储我们需要执行的操作次数。

  • 然后,我们将使用 if-else-if 语句检查余数,并根据它满足的条件将答案存储在 oprtn 中。

  • 最后,我们将返回 oprtn,它将是我们期望的输出。

示例

以下是上述方法的 C++ 实现:

#include <iostream>
#include<bits/stdc++.h>

using namespace std;

int numberOf(int n){   //function to calculate no of operations
   int remainder, oprtn;
   
   remainder= n%10;  // to get the unit digit of the given number
   
   if(remainder==0){  //if the unit digit is 0 or it is divisible by 10
      oprtn=0;
   }
   
   else if(remainder==5){   //if the unit digit is 5, no of operation required is 1
      oprtn=1;
   }
   
   else{   //if the unit digit is ny number other than 0 or 5
      oprtn=-1;
   }
   
   return oprtn;
   
}
int main(){
   int n=4;
   cout<<numberOf(n)<<endl;
   
   n=15;
   cout<<numberOf(n)<<endl;
   
   return 0;
}

输出

-1
1

**时间复杂度:O(1),**因为执行的是常数次操作。

空间复杂度:O(1)。

方法 2(使用嵌套 if else 语句)

在这种方法中,我们将使用嵌套 if else 语句来解决问题。

  • 检查数字是否能被 10 整除。如果可以,则打印 0。

  • 如果不是,则将数字乘以 2,然后再次检查它是否能被 10 整除。如果可以,则表示给定数字的个位数字是 5,因此打印 1,因为我们需要一个操作才能使其能被 10 整除。

  • 否则,打印 -1,因为个位数字是除 0 或 5 之外的任何数字,并且不可能仅通过将其乘以 2 来使数字能被 10 整除。

示例

以下是上述方法的 C++ 实现:

#include <iostream>
#include<bits/stdc++.h>

using namespace std;

//Driver Code
int main(){
   int N=13;
   
   if(N%10==0){  //if the number is divisible by 10
      cout<<0;
   }
   
   else{  //nested if-else
      N=N*2; //multiplying the number by 2 
      if(N%10==0){  //if number is divisible by 10 after multiplying by 2 i.e. last digit was 5
         cout<<1;
      } else {  //the unit digit is any number other than 0 or 5
         cout<<-1;
      }
   }
   
   return 0;
}

输出

-1

因为不可能仅通过将其乘以 2 来使 13 能被 10 整除。

**时间复杂度:O(1),**因为执行的是常数次操作。

空间复杂度:O(1)。

结论

在本文中,我们学习了如何解决问题,找出通过将给定数字乘以 2 来使给定数字能被 10 整除所需的最小操作次数。我们尝试了两种不同的方法来解决这个问题。我希望本文能帮助你理解这个问题,并澄清你对这个问题的概念。

更新于:2023年3月14日

255 次查看

启动你的职业生涯

完成课程获得认证

开始
广告
© . All rights reserved.