將給定的數字乘以 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 整除所需的最小操作次數。我們嘗試了兩種不同的方法來解決這個問題。我希望本文能幫助你理解這個問題,並澄清你對這個問題的概念。