Advertisement
nikunjsoni

906

May 8th, 2021
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.44 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     int superpalindromesInRange(string left, string right) {
  4.         long long LIMIT = int(sqrt(1e9)), L = stoll(left), R = stoll(right), ans = 0;
  5.        
  6.         // Even length number
  7.         for(int i=1; i<LIMIT; i++){
  8.             string pre = to_string(i);
  9.             string suf = pre;
  10.             reverse(suf.begin(), suf.end());
  11.             string num = pre + suf;
  12.             long long number = stoll(num);
  13.             if(number >= 1e9) break;
  14.             long long square = number*number;
  15.             if(square > R) break;
  16.             if(square >=L && square <= R)
  17.                 if(isPalindrome(square)) ans++;
  18.         }
  19.        
  20.         // Odd length number
  21.         for(int i=1; i<LIMIT; i++){
  22.             string pre = to_string(i);
  23.             string suf = pre.substr(0, pre.length()-1);
  24.             reverse(suf.begin(), suf.end());
  25.             string num = pre+suf;
  26.             long long number = stoll(num);
  27.             if(number >= 1e9) break;
  28.             long long square = number*number;
  29.             if(square > R) break;
  30.             if(square >=L && square <= R)
  31.                 if(isPalindrome(square)) ans++;
  32.         }
  33.         return ans;
  34.     }
  35.    
  36.     bool isPalindrome(long long num){
  37.         long long tmp = num, reverse=0;
  38.         while(tmp){
  39.             reverse *= 10;
  40.             reverse += tmp%10;
  41.             tmp /= 10;
  42.         }
  43.         return reverse ==  num;
  44.     }
  45.    
  46. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement