Cho một số lớn. Mục tiêu là đếm số lần xoay vòng của số đó mà kết quả chia hết cho 4.
Sử dụng tính chất: một số chia hết cho 4 nếu 2 chữ số cuối của nó chia hết cho 4. Ví dụ số 1234, các lần xoay: 1234, 4123, 3412, 2341. Trong đó 3412 chia hết cho 4 vì 12 chia hết cho 4.
Ví dụ
Đầu vào: num = 15324
Đầu ra: 2
Giải thích: Các lần xoay: 15324, 41532, 24153, 32415, 53241. Trong đó 15324 và 41532 chia hết cho 4.
Đầu vào: num = 848484
Đầu ra: 6
Giải thích: Tất cả 6 lần xoay đều chia hết cho 4.
Giải thuật
- Chuyển số thành chuỗi
str. - Nếu độ dài = 1: kiểm tra chữ số đó chia hết cho 4.
- Duyệt qua từng cặp 2 chữ số liên tiếp (tính cả cặp vòng tròn: chữ số cuối và chữ số đầu).
- Chuyển cặp thành số và kiểm tra chia hết cho 4.
Ví dụ triển khai
#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[0] - '0';
return (digit % 4 == 0) ? 1 : 0;
}
for (int i = 0; i < length - 1; i++) {
digit = (str[i] - '0') * 10 + (str[i+1] - '0');
if (digit % 4 == 0) count++;
}
// Cặp vòng tròn: chữ số cuối và chữ số đầu
digit = (str[length-1] - '0') * 10 + (str[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;
}
Kết quả
Count of rotations divisible by 4 are: 4