[USACO1.2]回文平方数 Palindromic Squares

# [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; }

 


__EOF__

本文作者Sakurajimamai
本文链接https://www.cnblogs.com/o-Sakurajimamai-o/p/17429305.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   o-Sakurajimamai-o  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
-- --
点击右上角即可分享
微信分享提示