P1206 [USACO1.2]回文平方数 Palindromic Squares(reverse)
题目描述
回文数是指从左向右念和从右向左念都一样的数。如12321就是一个典型的回文数。
给定一个进制B(2<=B<=20,由十进制表示),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等
输入输出格式
输入格式:
共一行,一个单独的整数B(B用十进制表示)。
输出格式:
每行两个B进制的符合要求的数字,第二个数是第一个数的平方,且第二个数是回文数。
输入输出样例
输入样例#1: 复制
10
输出样例#1: 复制
View Code
1 1 2 4 3 9 11 121 22 484 26 676 101 10201 111 12321 121 14641 202 40804 212 44944 264 69696
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define LL long long 4 string s1,s2; 5 char c[1000]; 6 char d[1000]; 7 int main() 8 { 9 int T; 10 cin>>T; 11 for(int i=1;i<=300;++i) 12 { 13 int h=i; 14 int f=1; 15 while(h) 16 { 17 if(h%T>=10) d[f++]=char(h%T+55); 18 else d[f++]=h%T+'0'; 19 h/=T; 20 } 21 string sss(d+1,d+f); 22 reverse(sss.begin(),sss.end()); 23 int k=i*i; 24 int l=1; 25 while(k) 26 { 27 if(k%T>=10) c[l++]=char(k%T+55); 28 else c[l++]=k%T+'0'; 29 k/=T; 30 } 31 string s(c+1,c+l); 32 s1=s; 33 reverse(s.begin(),s.end()); 34 if(s==s1) { 35 cout<<sss<<" "<<s<<endl; 36 } 37 38 39 40 } 41 }