Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นับการหมุนหารด้วย 8 ใน C++


เราได้รับจำนวนมาก เป้าหมายคือการนับการหมุนของ num ที่หารด้วย 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.

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

เราจะแปลงตัวเลขเป็นสตริงและข้ามผ่านตัวเลขโดยใช้ a for a loop สำหรับตัวเลขสามหลักแต่ละคู่ให้แปลงเป็นจำนวนเต็มและตรวจสอบการหารด้วย 8 หากหารลงตัวให้เพิ่มจำนวนขึ้น

  • นำตัวเลขเป็นยาว num.

  • ฟังก์ชัน Rotation_8(long long num) ใช้ตัวเลข num และส่งกลับจำนวนการหมุนของ num ที่หารด้วย 8 ลงตัว

  • แปลง num เป็น string str=to_string(num)

  • จำนวนหลักใน num จะเป็น length=str.length()

  • ใช้ตัวแปรชั่วคราว digit=0 เพื่อเก็บค่าจำนวนเต็มสามหลัก

  • นับเริ่มต้นเป็น 0

  • หากความยาวเป็น 1 แสดงว่ามีเพียงหลักเดียวเท่านั้น แปลงเป็นจำนวนเต็ม digit=(str.at(0)-’0’) ตรวจสอบการหารด้วย 8 แล้วคืนค่าผลลัพธ์เป็น 1 หรือ 0

  • หากความยาวเป็น 2 แสดงว่ามีเพียงสองหลักเท่านั้น แปลงเป็นจำนวนเต็ม part_1=(str.at(0)- ’0’) และ part_2 =(str[1] - '0') * 10 + (str[0] - '0') ตรวจสอบการหารด้วย 8 แล้วคืนค่าผลลัพธ์เป็น 1 หรือ 0

  • มิฉะนั้น สำหรับความยาวมากกว่าหรือเท่ากับสามหลัก ให้ข้ามสตริงโดยใช้ for loop จาก i=0 ถึง i=length-1 และแปลงอักขระสามตัวเป็นค่าจำนวนเต็มด้วย digit =(str[i] - '0') * 100 + (str[i + 1] - '0') * 10 + (str[i + 2] - '0'); . หากค่าของหลักหารด้วย 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