洛谷 P1206 [USACO1.2]迴文平方數 Palindromic Squares
阿新 • • 發佈:2018-12-16
題目描述
迴文數是指從左向右念和從右向左念都一樣的數。如12321就是一個典型的迴文數。
給定一個進位制B(2<=B<=20,由十進位制表示),輸出所有的大於等於1小於等於300(十進位制下)且它的平方用B進製表示時是迴文數的數。用’A’,’B’……表示10,11等等
輸入輸出格式
輸入格式: 共一行,一個單獨的整數B(B用十進位制表示)。
輸出格式: 每行兩個B進位制的符合要求的數字,第二個數是第一個數的平方,且第二個數是迴文數。
輸入輸出樣例
輸入樣例#1: 10
輸出樣例#1: 1 1 2 4 3 9 11 121 22 484 26 676 101 10201 111 12321 121 14641 202 40804 212 44944 264 69696
說明 題目翻譯來自NOCOW。 USACO Training Section 1.2 . . . . . 分析 一道水題 輸出的前一個數是在B進位制下的 . . . . 程式:
#include<iostream> #include<cstdio> using namespace std; int b; string work(int x) { string zfc=""; char bz[1]; int mod; while (x>=b) { mod=x%b; if (mod>=10) { bz[0]=(char)'A'+mod%10; zfc=bz[0]+zfc; } else { bz[0]=(char)mod+'0'; zfc=bz[0]+zfc; } x=x/b; } if (x>=10) { bz[1]=(char)'A'+(x%10); zfc=bz[1]+zfc; } else { bz[1]=(char)x+'0'; zfc=bz[1]+zfc; } return zfc; } bool check(string s) { int l=s.length(),bz=0; if (l==2) { if (s[0]!=s[1]) return false; else return true; } for (int i=l;i>=1;i--) s[i]=s[i-1]; for (int i=1;i<=l/2;i++) if (s[i]!=s[l-i+1]) { bz=1; break; } if (bz==1) return false; return true; } int main() { scanf("%d",&b); for (int i=1;i<=300;i++) { string p=work(i*i); if (check(p)==true) { string w=work(i); cout<<w<<' '<<p<<endl; } } return 0; }