---
title: "回文平方"
description: "又是一道基础题，考察双指针和进制转化"
canonical_url: "https://yangqiuyi.com/blog/suan-fa/hui-wen-ping-fang"
---

> Index of every page on this site: [llms.txt](https://yangqiuyi.com/llms.txt)

又是一道基础题，考察双指针和进制转化

## 题目

回文数是指数字从前往后读和从后往前读都相同的数字。

例如数字 12321 就是典型的回文数字。

现在给定你一个整数 B，请你判断 1∼300 之间的所有整数中，有哪些整数的平方转化为 B 进制后，其 B 进制表示是回文数字。

输入格式
一个整数 B。

输出格式
每行包含两个在 B 进制下表示的数字。

第一个表示满足平方值转化为 B 进制后是回文数字那个数，第二个数表示第一个数的平方。

所有满足条件的数字按从小到大顺序依次输出。

数据范围
2≤B≤20,
对于大于 9 的数字，用 A 表示 10，用 B 表示 11，以此类推。

输入样例：

> 10

输出样例：

> 1 1
> 2 4
> 3 9
> 11 121
> 22 484
> 26 676
> 101 10201
> 111 12321
> 121 14641
> 202 40804
> 212 44944
> 264 69696

## Code

```cpp
#include <bits/stdc++.h>

using namespace std;

map<int,int> a;

bool iH(string n)
{
    for(int i=0,j=n.size()-1;i<j;i++,j--)
    {
        if(n[i]!=n[j]) return false;
    }
    return true;
}

char get(int num)
{
    if(num>9) return num-10+'A';
    return num+'0';
}

string base(int n,int b)
{
    string res;
    while(n) res+=get(n%b),n/=b;
    reverse(res.begin(),res.end());
    return res;
}

int main()
{
    int b;
    cin>>b;
    for(int i=1;i<=300;i++)
    {
        if(iH(base(i*i,b)))
        {
            cout<<base(i,b)<<" "<<base(i*i,b)<<endl;
        }
    }
    return 0;
}
```

## Sitemap

See the full [sitemap](https://yangqiuyi.com/sitemap.md) for all pages.
