เราได้รับจำนวนมาก เป้าหมายคือการนับการหมุนของ num ที่หารด้วย 4 ลงตัว
เนื่องจากการหมุนไม่สามารถทำได้ซ้ำแล้วซ้ำอีก เราจะใช้คุณสมบัติที่หารด้วย 4 ลงตัว ถ้าเลขสองหลักสุดท้ายหารด้วย 4 ลงตัว เลขนั้นหารด้วย 4 ลงตัว ถ้าเลขเป็น 1234 ก็จะหมุนเวียนเป็น 1234, 4123, 3412, 2341 โดย 3412 จะหารด้วย 4 ลงตัวตามเลขสองหลักสุดท้าย 12 คือ หารด้วย 4.
ให้เราเข้าใจด้วยตัวอย่าง
ป้อนข้อมูล − num=15324
ผลผลิต − จำนวนการหมุนที่หารด้วย 4 ลงตัวคือ 2
คำอธิบาย − การหมุนคือ −
15324, 41532, 24153, 32415, 53241
จากจำนวนนี้ 15324 และ 41532 จะหารด้วย 4 ลงตัว
ป้อนข้อมูล − num=848484
ผลผลิต − จำนวนการหมุนที่หารด้วย 4 ลงตัวคือ − 6
คำอธิบาย − การหมุนคือ −
848484, 484848, 848484, 484848, 848484, 484848
การหมุนทั้งหมดนี้หารด้วย 4
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
เราจะแปลงตัวเลขเป็นสตริงและข้ามผ่านตัวเลขโดยใช้ a for a loop สำหรับแต่ละคู่ของตัวเลขสองหลักให้แปลงเป็นจำนวนเต็มและตรวจสอบการหารด้วย 4 หากหารลงตัวให้เพิ่มจำนวนขึ้น
-
นำตัวเลขเป็นยาว num.
-
ฟังก์ชัน Rotation_4(long long num) ใช้ตัวเลข num และส่งกลับจำนวนการหมุนของ num ที่หารด้วย 4 ลงตัว
-
แปลง num เป็น string str=to_string(num)
-
จำนวนหลักใน num จะเป็น length=str.length()
-
ใช้ตัวแปรชั่วคราว digit=0 เพื่อเก็บค่าจำนวนเต็มของคู่ตัวเลข
-
นับเริ่มต้นเป็น 0
-
หากความยาวเป็น 1 แสดงว่ามีเพียงหลักเดียวเท่านั้น แปลงเป็นจำนวนเต็ม digit=(str.at(0)-’0’)
-
ตรวจสอบการหารด้วย 4 แล้วคืนค่าผลลัพธ์เป็น 1 หรือ 0
-
ตอนนี้ข้าม str โดยใช้ for loop จาก i=0 ถึง I
-
สร้างตัวเลขสองหลักโดยใช้ digit=(str.at(i)-'0')*10 + (str.at(i+1)-'0') เนื่องจากแต่ละคู่จะกลายเป็นสองหลักสุดท้ายในการหมุนพี>
-
ทำขั้นตอนเดียวกันกับข้างบนสำหรับคู่ที่เกิดจากหลักสุดท้ายและหลักแรกโดยใช้ digit=(str.at(length-1)-'0')*10 + (str.at(0)-'0'); ตรวจสอบการหารด้วย 4 และอัปเดตจำนวน
-
ผลตอบแทนสุดท้ายนับเป็นผลลัพธ์
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int Rotation_4(long long num){ string str = to_string(num); int length = str.length(); int digit = 0, count = 0; if (length == 1){ digit=(str.at(0)-'0'); if(digit%4 == 0){ return 1; } else{ return 0; } } for (int i=0; i<(length-1); i++){ digit = (str.at(i)-'0')*10 + (str.at(i+1)-'0'); if(digit%4 == 0){ count++; } } digit = (str.at(length-1)-'0')*10 + (str.at(0)-'0'); if(digit%4 == 0){ count++; } return count; } int main(){ long long num = 24040; cout<<"Count of rotations divisible by 4 are: "<<Rotation_4(num); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Count of rotations divisible by 4 are: 4