#include #include #include using namespace std; string add(string summand1, string summand2) { string sum; unsigned short p; unsigned short q; unsigned short r; bool izero = false; bool carry = false; unsigned long i; unsigned long l = summand1.size(); unsigned long m = summand2.size(); char t; sum.clear(); if(l < m){ while(l < m){ summand1.insert(0,"0"); l = summand1.size(); } }else{ if(m < l){ while(m < l){ summand2.insert(0,"0"); m = summand2.size(); }}} for(i = (unsigned) summand1.size() - 1; izero == false; i--){ if(i == 0) izero = true; if(summand1[i] == '0') p = summand1[i] - 48; else p = summand1[i] - 48; if(summand2[i] == '0') q = summand2[i] - 48; else q = summand2[i] - 48; if(carry == false){ r = p + q; if(r > 9){ r = r - 10; carry = true; } } else {{ r = p + q + 1; carry = false; } if(r > 9){ r = r - 10; carry = true; } } if(r == 0) t = r + 48; else t = r + 48; string u; stringstream ss; ss << t; ss >> u; sum.insert(0,u); } if(((unsigned) summand1.size() == (unsigned) sum.size()) && (carry == true)) sum.insert(0,"1"); return (sum); } bool greaterthan(string firstnumber, string secondnumber) { bool isgreater; bool cond = true; if((unsigned) firstnumber.size() > (unsigned) secondnumber.size()) isgreater = true; else{ if((unsigned) firstnumber.size() < (unsigned) secondnumber.size()) isgreater = false; else{ if((unsigned) firstnumber.size() == (unsigned) secondnumber.size()){ for(unsigned long i = 0; (i < (unsigned) firstnumber.size()) && (cond == true); i++){ unsigned short p = firstnumber[i] - 48; unsigned short q = secondnumber[i] - 48; if(p > q){ isgreater = true; cond = false; }else{ if(p < q){ isgreater = false; cond = false; }}}}}} return (isgreater); } string reversedigits(string numbertoreverse) { string numreversed; long i = (unsigned) numbertoreverse.size() - 1; while(i >= 0){ string u; stringstream ss; ss << numbertoreverse[i]; ss >> u; numreversed.append(u); i--; } return (numreversed); } bool ispalindrome(string mystring) { bool ispalindrome = true; unsigned int a = 0; unsigned int b = (unsigned) mystring.size() - 1; while(a < b){ char c = mystring[a]; char d = mystring[b]; if(c != d){ ispalindrome = false; a = b; }else{ a++; b--; } } return (ispalindrome); } int main() { string searchbound = "1000"; string testcandidate = "1"; string reversed; string reverseaddsum; string seq = ""; while(greaterthan(testcandidate, searchbound) == false){ string numforsum = testcandidate; if(ispalindrome(numforsum) == true) numforsum = "99999999999999"; while(greaterthan(numforsum, "8813200023188") == false){ reversed = reversedigits(numforsum); numforsum = add(numforsum, reversed); if(ispalindrome(numforsum) == true && numforsum != "8813200023188"){ numforsum = "99999999999999"; }else{ if(numforsum == "8813200023188"){ seq += testcandidate; seq += ", "; } } } testcandidate = add(testcandidate, "1"); } cout << seq << endl; return 0; }