/* ID: victor4 PROG: palsquare LANG: C++ */ #include <iostream> #include <fstream> #include <string> #include <algorithm> using namespace std; inline char to_char(int c){ if(c >= 10) return c - 10 + 'A'; return c + '0'; } string tobase(int num, int base){ string ret; int div = base; while(div < num) div *= base; for(div /= base;;){ ret += to_char(num / div); // get remainder num = num % div; // next if(div < 2) break; div /= base; } return ret; } string reverse_str(string str){ reverse(str.begin(), str.end()); return str; } int main() { ofstream fout ("palsquare.out"); ifstream fin ("palsquare.in"); int base; fin >> base; for(int i = 1; i <= 300; ++i){ string n = tobase(i, base), n2(tobase(i * i, base)); if(n2 == reverse_str(n2)) fout << n << " " << n2 << endl; } return 0; }
C++ solutions, both training and real, are posted when possible; they are provided for reference purposes only.
Monday, April 16, 2012
Problem 81: Palindromic Squares
This one requires base conversion, but I'm basically testing every square from 1 to 300 (90 000 fits into a 32-bit signed int; no intervention required). I reverse the string and test if it matches. If so, print the number and its palindromic square, in the requested base.
Labels:
chapter 1,
section 1.2,
training
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment