मतगणना [डुप्लिकेट]
सवाल था: एक प्रतियोगिता n दिनों hh घंटे, मिमी मिनट और ss सेकंड में बंद हो जाती है। N के दो मानों को देखते हुए, संकेतित अंतराल में प्रारूप nhms के कितने पैलंड्रोम होंगे?
उदाहरण 1
इनपुट
१ २
उत्पादन
472
व्याख्या
हमें 2235959 के माध्यम से 1000000 नंबरों की जाँच करने की आवश्यकता है जिसमें केवल वे संख्याएँ शामिल हैं जहाँ अंतिम 6 अंक बार-बार मिलते हैं। हमें 472 ऐसे नंबर मिलते हैं: 1000001, 1001001, 1002001, 1003001, 1004001, ..., 2231322, 2232322, 2233322, 2234322, 2235322
उदाहरण 2
इनपुट
0 2
उत्पादन
708
व्याख्या
708 palindromes हैं: 0000000, 0001000, 0002000, 0003000, 0004000, ..., 2231322, 2232322, 2233322, 2234322, 2235322
मैंने कोशिश की है:
#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
#define int long long
int ctr = 0;
int isPal(int n) {
int reverse = 0;
for(int i = n; i > 0; i /= 10)
reverse = reverse*10 + i%10;
return n == reverse;
}
void inRange(int low, int high) {
for (int i = low; i <= high; i++) {
if (isPal(i)) {
string tmp_str = to_string(i);
string hh = tmp_str.substr(1, 2);
string mm = tmp_str.substr(3, 2);
string ss = tmp_str.substr(5, 2);
int hh1, mm1, ss1;
hh1 = stoi(hh);
mm1 = stoi(mm);
ss1 = stoi(ss);
if (hh1 <= 23 && mm1 <=59 && ss1 <=59)
ctr++;
}
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n1, n2, min, max;
cin >> n1 >> n2;
min = n1*1000000;
max = (n2*1000000)+235959;
inRange(min,max);
if (n1 == 0)
cout << (ctr+99);
else
cout << ctr;
return 0;
}
लेकिन यह एक त्रुटि के रूप में फेंक रहा है:
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr: __pos (which is 3) > this->size() (whic
h is 1)
exited, aborted
किसी भी सहायता की सराहना की जाएगी!
जवाब
std::to_stringसमारोह में शामिल नहीं है अग्रणी शून्य परिणाम में। आपका वर्तमान कोड मानता है कि स्ट्रिंग 7 अंक है, लेकिन यह सच नहीं हो सकता है और संभावना है कि std::string::substrएक अमान्य स्थिति के लिए अपवाद क्यों फेंक रहा है।