将给定的数字乘以 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 整除所需的最小操作次数。我们尝试了两种不同的方法来解决这个问题。我希望本文能帮助你理解这个问题,并澄清你对这个问题的概念。
数据结构
网络
关系型数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP