Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- int superpalindromesInRange(string left, string right) {
- long long LIMIT = int(sqrt(1e9)), L = stoll(left), R = stoll(right), ans = 0;
- // Even length number
- for(int i=1; i<LIMIT; i++){
- string pre = to_string(i);
- string suf = pre;
- reverse(suf.begin(), suf.end());
- string num = pre + suf;
- long long number = stoll(num);
- if(number >= 1e9) break;
- long long square = number*number;
- if(square > R) break;
- if(square >=L && square <= R)
- if(isPalindrome(square)) ans++;
- }
- // Odd length number
- for(int i=1; i<LIMIT; i++){
- string pre = to_string(i);
- string suf = pre.substr(0, pre.length()-1);
- reverse(suf.begin(), suf.end());
- string num = pre+suf;
- long long number = stoll(num);
- if(number >= 1e9) break;
- long long square = number*number;
- if(square > R) break;
- if(square >=L && square <= R)
- if(isPalindrome(square)) ans++;
- }
- return ans;
- }
- bool isPalindrome(long long num){
- long long tmp = num, reverse=0;
- while(tmp){
- reverse *= 10;
- reverse += tmp%10;
- tmp /= 10;
- }
- return reverse == num;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement