logo资料库

USACO题目Palindromic Squares(回文平方数)及代码解析.docx

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
描述 回文数是指从左向右念和从右向左念都一样的数。如 12321 就是一个典型的回文数。 给定一个进制 B(2<=B<=20,由十进制表示),输出所有的大于等于 1 小于等于 300(十进制下) 且它的平方用 B 进制表示时是回文数的数。用’A’,’B’……表示 10,11 等等。 [编辑]格式 PROGRAM NAME: palsquare INPUT FORMAT: file (palsquare.in) 共一行,一个单独的整数 B(B 用十进制表示)。 OUTPUT FORMAT: file (palsquare.out) 每行两个 B 进制的符合要求的数字,第二个数是第一个数的平方,且第二个数是回文数。 [编辑]SAMPLE INPUT 10 [编辑]SAMPLE OUTPUT 1 1 2 4 3 9 11 121 22 484 26 676 101 10201 111 12321 121 14641 202 40804 212 44944 264 69696 程序: #include #include using namespace std; ifstream fin ("palsquare.in"); ofstream fout ("palsquare.out"); const char a[21] = {'0','1','2','3','4','5','6','7','8','9','A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K'}; int n; void get(int t) { string s(""); int m = t * t; do { s = a[m % n] + s;
m /= n; } while (m > 0); bool mark(true); for (int i = 0; i <= s.size() / 2 - 1; i++) if (s[i] != s[s.size() - i - 1]) { mark = false; break; } string w(""); do { w = a[t % n] + w; t /= n; } while (t > 0); if (mark == true || s.size() == 1) fout << w << " " << s << endl; } int main(void) { fin >> n; for (int i = 1; i <= 300; i++) get(i); } 这个牛逼~!: #include using namespace std; int B; const int MAX=300; char CH[20]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J'}; void printdata(int x) { int a[30],i=0; while (x>0) a[++i]=x%B,x/=B; for (;i;cout<
a[++n]=xx%B,xx/=B; while (xx>0) int t=n; for (;(n>0)&&(a[n]==a[t-n+1]);--n); if (n==0) printdata(x),cout<<' ',printdata(x*x),cout<>B; for (int i=1;i<=MAX;i++) handle(i); return 0; }
分享到:
收藏