हमें एक बड़ी संख्या दी गई है। लक्ष्य num के उन रोटेशन की संख्या गिनना है जो 8 से विभाज्य हैं।
चूंकि रोटेशन को बार-बार नहीं किया जा सकता। हम 8 से विभाज्यता के गुणधर्म का उपयोग करेंगे। यदि अंतिम तीन अंक 8 से विभाज्य हैं तो संख्या 8 से विभाज्य है। यदि संख्या 1800 है तो इसके रोटेशन होंगे 1800, 0180, 0018, 8001 जिनमें से 1800, 8 से विभाज्य है।
उदाहरण सहित समझ
इनपुट - num=15320
आउटपुट - 8 से विभाज्य रोटेशन की संख्या: 1
व्याख्या - रोटेशन हैं:
15320, 01532, 20153, 32015, 53201 इनमें से केवल 15320, 8 से विभाज्य है।
इनपुट - num=848484
आउटपुट - 8 से विभाज्य रोटेशन की संख्या: 3
व्याख्या - रोटेशन हैं:
848484, 484848, 848484, 484848, 848484, 484848 इनमें से सभी 484848, 8 से विभाज्य हैं।
प्रोग्राम में उपयोग किया गया दृष्टिकोण
हम संख्या को स्ट्रिंग में बदलेंगे और फॉर लूप का उपयोग करके संख्या को ट्रैवर्स करेंगे। प्रत्येक तीन अंकों के जोड़े के लिए उन्हें पूर्णांक में बदलें और 8 से विभाज्यता जांचें। यदि विभाज्य है तो काउंट बढ़ाएँ।
- संख्या को
long long numके रूप में लें। - फंक्शन
Rotation_8(long long num)संख्याnumलेता है औरnumके उन रोटेशन की संख्या लौटाता है जो 8 से विभाज्य हैं। numको स्ट्रिंग में बदलें: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') * 10 + (str[1] - '0')औरpart_2 = (str[1] - '0') * 10 + (str[0] - '0')। 8 से विभाज्यता जांचें और परिणाम 1 या 0 के रूप में लौटाएँ। - अन्यथा तीन या अधिक अंकों की लंबाई के लिए, फॉर लूप का उपयोग करके 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) {
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