题目描述
回文数是指从左向右念和从右向左念都一样的数。如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
【分析】
枚举,写两个小函数就可以了。
【代码】
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int b, no, sq; 5 string s, ns="0123456789ABCDEFGHIJ"; 6 7 void change(int x) { 8 s.clear(); 9 while (x>0) { 10 s+=ns[x%b]; 11 x/=b; 12 } 13 reverse(s.begin(), s.end()); 14 } 15 16 bool check() { 17 for (size_t i=0;i<s.length();++i) 18 if (s[i]!=s[s.length()-i-1]) 19 return false; 20 return true; 21 } 22 23 int main() { 24 cin >> b; 25 for (int i=1;i<=300;++i) { 26 no=i; 27 sq=i*i; 28 change(sq); 29 if (check()) { 30 change(no); 31 cout << s << " "; 32 change(sq); 33 cout << s << endl; 34 } 35 } 36 }
时间: 2024-12-28 08:38:51