http://train.usaco.org/usacoprob2?a=RpE7lHu9ejp&S=palsquare
题目大意:
输入b(0<b<=20)
输出1---300(十进制)转化到b进制后的平方是回文字符序列的数字(以b进制形式输出)
#include <iostream> #include <fstream> using namespace std; string s = "0123456789ABCDEFGHIG"; string convert(int n, int r) //n(10进制)----> string(r进制) { string c, c1; int d; //余数 while(n) { d = n%r; c += s[d]; n /= r; } for(int i = c.size() - 1; i >= 0; i--) c1 += c[i]; return c1; } bool isok(string c) //判断是否回文 { for(int i = 0, j = c.size() - 1; i < j; i++, j--) if(c[i] != c[j]) return false; return true; } int main() { ifstream fin("palsquare.in"); ofstream fout("palsquare.out"); int b; string c; while(fin >> b) { for(int i = 1; i <= 300; i++) { c = convert(i*i, b); if(isok(c)) fout << convert(i, b) << " " << c <<endl;; } } return 0; }