আমাদের একটি বড় সংখ্যা দেওয়া আছে। লক্ষ্য হলো এই সংখ্যার রোটেশন (rotation) গুলোর মধ্যে ৮ দিয়ে বিভাজ্য কতটি আছে তা বের করা।
রোটেশন বারবার করা যাবে না, তাই আমরা ৮ দিয়ে বিভাজ্যতার নিয়ম ব্যবহার করব: শেষ তিনটি ডিজিট যদি ৮ দিয়ে বিভাজ্য হয়, তবে পুরো সংখ্যও ৮ দিয়ে বিভাজ্য। উদাহরণস্বরূপ, ১৮০০ এর রোটেশন গুলো: ১৮০০, ০১৮০, ০০১৮, ৮০০১। এর মধ্যে ১৮০০, ৮ দিয়ে বিভাজ্য।
উদাহরণ দিয়ে বুঝি
ইনপুট − num=15320
আউটপুট − ৮ দিয়ে বিভাজ্য রোটেশন সংখ্যা: ১
ব্যাখ্যা − রোটেশন গুলো: ১৫৩২০, ০১৫৩২, ২০১৫৩, ৩২০১৫, ৫৩২০১। এর মধ্যে শুধু ১৫৩২০, ৮ দিয়ে বিভাজ্য।
ইনপুট − num=848484
আউটপুট − ৮ দিয়ে বিভাজ্য রোটেশন সংখ্যা: ৩
ব্যাখ্যা − রোটেশন গুলো: ৮৪৮৪৮৪, ৪৮৪৮৪৮, ৮৪৮৪৮৪, ৪৮৪৮৪৮, ৮৪৮৪৮৪, ৪৮৪৮৪৮। সব ৪৮৪৮৪৮ গুলো ৮ দিয়ে বিভাজ্য।
প্রোগ্রামে ব্যবহৃত পদ্ধতি
সংখ্যাকে স্ট্রিং-এ কনভার্ট করে লুপ দিয়ে ঘুরব। প্রতিটি তিন ডিজিটের জোড়াকে ইন্টিজারে কনভার্ট করে ৮ দিয়ে বিভাজ্যতা চেক করব। বিভাজ্য হলে কাউন্ট বাড়াব।
- সংখ্যা
long long numহিসেবে নিন। Rotation_8(long long num)ফাংশন সংখ্যা নিয়ে ৮ দিয়ে বিভাজ্য রোটেশন কাউন্ট রিটার্ন করে।- স্ট্রিং-এ কনভার্ট করুন:
str = to_string(num)। - ডিজিট সংখ্যা:
length = str.length()। - তিন ডিজিটের ইন্টিজার মান রাখার জন্য
digit=0, কাউন্টের জন্যcount=0। - যদি
length == 1: একক ডিজিটকে ইন্টিজারে কনভার্ট করে ৮ দিয়ে বিভাজ্যতা চেক করুন, ১ বা ০ রিটার্ন করুন। - যদি
length == 2: দুটি ডিজিটের দুটি রোটেশন বানান, ৮ দিয়ে বিভাজ্যতা চেক করুন, কাউন্ট রিটার্ন করুন। - অন্যথায় (৩ বা অধিক ডিজিট):
i=0থেকেlength-1পর্যন্ত লুপে তিন ক্যারেক্টারকে ইন্টিজারে কনভার্ট করুন:digit = (str[i]-'0')*100 + (str[i+1]-'0')*10 + (str[i+2]-'0')। ৮ দিয়ে বিভাজ্য হলে কাউন্ট বাড়ান। - শেষ ডিজিট এবং প্রথম দুটি ডিজিট দিয়ে বানানো জোড়াও চেক করুন।
- শেষে
countরিটার্ন করুন।
উদাহরণ
#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) {
digit = str[0] - '0';
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