用 C++ 統計可被 8 整除的旋轉數


給定一個大數。目標是統計該數字的旋轉數中,有多少個可以被 8 整除。

由於旋轉不能無限次進行,我們將使用可被 8 整除的特性。如果最後三位數字可以被 8 整除,那麼該數字就可以被 8 整除。如果數字是 1800,那麼它的旋轉將是 1800、0180、0018、8001,其中 1800 可以被 8 整除。

讓我們透過例子來理解。

輸入 − num=15320

輸出 − 可被 4 整除的旋轉數的個數為:1

說明 − 旋轉為 −

15320, 01532, 20153, 32015, 53201
Out of these, only 15320 is divisible by 8.

輸入 − num=848484

輸出 − 可被 4 整除的旋轉數的個數為:3

說明 − 旋轉為 −

848484, 484848, 848484, 484848, 848484, 484848
Out of this all 484848’s are divisible by 8.

下面程式中使用的演算法如下

我們將數字轉換為字串,並使用 for 迴圈遍歷該數字。對於每三位數字,將其轉換為整數並檢查是否可以被 8 整除。如果可以被整除,則遞增計數。

  • 將數字作為 long long num。

  • 函式 Rotation_8(long long num) 獲取數字 num 並返回 num 的可被 8 整除的旋轉數的個數。

  • 將 num 轉換為字串 str=to_string(num)。

  • num 中的數字個數將為 length=str.length()。

  • 使用臨時變數 digit=0 儲存三位數字的整數值。

  • 將初始計數設定為 0。

  • 如果 length 為 1,則僅存在一位數字。將其轉換為整數,digit=(str.at(0)-’0’)。檢查是否可以被 8 整除,並返回結果 1 或 0。

  • 如果 length 為 2,則僅存在兩位數字。將其轉換為整數,part_1=(str.at(0)- ’0’) 和 part_2 = (str[1] - '0') * 10 + (str[0] - '0')。檢查是否可以被 8 整除,並返回結果 1 或 0。

  • 否則,對於長度大於或等於三位數字的情況,使用 for 迴圈從 i=0 到 i=length-1 遍歷字串,並將三個字元轉換為整數值,方法為 digit = (str[i] - '0') * 100 + (str[i + 1] - '0') * 10 + (str[i + 2] - '0');。如果 digit 的值可以被 8 整除,則遞增計數。

  • 對由最後一位數字和前兩位數字組成的對執行相同的操作,方法為 digit = (str[length - 1] - '0') * 100 + (str[0] - '0') * 10 + (str[1] - '0');

  • 檢查是否可以被 8 整除並更新計數。

  • 最後,返回計數作為結果。

示例

 線上演示

#include <bits/stdc++.h>
using namespace std;
int Rotation_8(long long num){
   string str = to_string(num);
   int length = str.length();
   int digit = 0, count = 0;
   if (length == 1){
      if(digit % 8 == 0){
         return 1;
      }
      else{
         return 0;
      }
   }
   else if(length == 2){
      int part_1 = (str[0] - '0') * 10 + (str[1] - '0');
      int part_2 = (str[1] - '0') * 10 + (str[0] - '0');
      if (part_1 % 8 == 0){
         count++;
      }
      if (part_2 % 8 == 0){
         count++;
      }
      return count;
   }
   else{
      for(int i = 0; i < (length - 2); i++){
         digit = (str[i] - '0') * 100 + (str[i + 1] - '0') * 10 + (str[i + 2] - '0');
         if (digit % 8 == 0){
            count++;
         }
      }
   }
   digit = (str[length - 1] - '0') * 100 + (str[0] - '0') * 10 + (str[1] - '0');
   if(digit % 8 == 0){
      count++;
   }
   digit = (str[length - 2] - '0') * 100 + (str[length - 1] - '0') * 10 + (str[0] - '0');
   if(digit%8 == 0){
      count++;
   }
   return count;
}
int main(){
   long long num = 24040;
   cout<<"Count of rotations divisible by 8 are: "<<Rotation_8(num);
   return 0;
}

輸出

如果我們執行上述程式碼,它將生成以下輸出:

Count of rotations divisible by 8 are: 3

更新時間: 2020-12-01

240 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.