將給定的數字乘以 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 次檢視

啟動你的職業生涯

完成課程獲得認證

開始
廣告