# [USACO1.2]回文平方数 Palindromic Squares
## 题目描述
回文数是指从左向右念和从右向左念都一样的数。如 12321 就是一个典型的回文数。
给定一个用十进制表示的正整数 B,输出所有 [1,300] 中,它的平方用 B 进制表示时是回文数的数。
## 输入格式
共一行,一个单独的正整数 B。
## 输出格式
每行两个 B 进制的符合要求的数字,第二个数是第一个数的平方,且第二个数是回文数。
注意大于 9 的数,用字母表示。如用 `A` 表示 10,`B` 表示 11,用第 n 个大写字母表示 n+9。
## 样例 #1
### 样例输入 #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
```
很明显啊,回文数不是什么新鲜事,关键在于数制转换;
#include<bits/stdc++.h> using namespace std; int n,a[10001],b[10001],ss,s; int main() { cin>>n; for(int i=1;i<301;i++) { int op=i*i; ss=1,s=1; a[1]=op,b[1]=i; while(b[s]>=n)//新学的技巧,转换进制 { b[s+1]+=b[s]/n; b[s]%=n; s++; } while(a[ss]>=n) { a[ss+1]+=a[ss]/n; a[ss]%=n; ss++; } for(int j=1;j<=ss/2;j++) if(a[j]!=a[ss-j+1]) goto nexts;//第一次用go to函数,好帅; for(int j=s;j>=1;j--) if(b[j]<10) cout<<b[j]; else cout<<char(55+b[j]); cout<<" "; for(int j=1;j<=ss;j++) if(a[j]<10) cout<<a[j]; else cout<<char(55+a[j]); cout<<endl; nexts:; memset(a,0,sizeof a); memset(b,0,sizeof b); } return 0; }
标签:USACO1.2,平方,Palindromic,ss,int,##,Squares,回文 From: https://www.cnblogs.com/o-Sakurajimamai-o/p/17429305.html