Day 7 acwing打卡 1346.回文平方

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

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

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

输入格式

一个整数 BB。

输出格式

每行包含两个在 BB 进制下表示的数字。

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

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

数据范围

2B202≤B≤20,
对于大于 99 的数字,用 AA 表示 1010,用 BB 表示 1111,以此类推。

输入样例:

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

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;

int n;

char getch(int b)
{
    if(b >= 10)
        return b - 10 + 'A';
    else
        return b + '0';
}

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


string base(int num){
    string st = "";
    int x = 0;
    
    while(num){
        x = num % n;
        st += getch(x);
        num /= n;
    }
    
    reverse(st.begin(), st.end());
    return st;
}


int main()
{
    
    cin >> n;
    
    for(int i = 1; i <= 300; i++)
    {
        string st = base(i * i);
        
        if(judge(st))
            cout<< base(i) << " "<< st <<endl;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/xiaowangdatie/p/14523762.html