题目描述
回文数是指数字从前往后读和从后往前读都相同的数字。
例如数字
12321
12321 就是典型的回文数字。
现在给定你一个整数
�
B,请你判断
1
1∼
300
300 之间的所有整数中,有哪些整数的平方转化为
�
B 进制后,其
�
B 进制表示是回文数字。
输入格式
一个整数
�
B。
输出格式
每行包含两个在
�
B 进制下表示的数字。
第一个表示满足平方值转化为
�
B 进制后是回文数字那个数,第二个数表示第一个数的平方。
所有满足条件的数字按从小到大顺序依次输出。
样例
输入数据 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
输入数据 2
12
输出数据 2
1 1
2 4
3 9
11 121
22 484
101 10201
111 12321
121 14641
12B 16661
131 16B61
202 40804
204 41414
数据范围
2
≤
�
≤
20
2≤B≤20
对于大于
9
9 的数字,用
�
A表示
10
10,用
�
B 表示
11
11,以此类推。
#include<bits/stdc++.h>
using namespace std;
int n;
char dashi[10] = { 'A','B','C','D','E','F','G','H','I','J'};//存入当大于10时将要输出的字母
void shuchu(int x) {//输出数当小于10时输出数字,反之按输出顺序输出字母
if (x >= 10) {
cout << dashi[x - 10];
}
else {
cout << x;
}
}
void njinghzhi(int x){//按照整除法将数字除以进制数,将余数存入a数组中,输出时按照逆序输出
int a[10];
int i = 0;
for (; x != 0; i++) {
a[i] = x % n;
x = x / n;
}
i--;
for (; i >= 0; i--) {
shuchu(a[i]);//运用上面的函数将数组中的每一个位数将其按照我们所设定的规则输出
}
}
int panduan(int x) {//运用的方法和上面的函数方法相同,加上判断从后往前和从前往后的顺序,判断a数组中的数字是否相同
int a[10];
int i = 0;
for (; x != 0; i++) {
a[i] = x % n;
x = x / n;
}
i--;
int j = 0,shu=0;
for (; i > j; i--,j++) {
if (a[i] != a[j]) {
shu=1;//有不同的数字就使shu等于1
}
}
return shu;//返回数字判断是否是回文数
}
//代码可以优化,将第二个函数和第三个函数进行合并一下,将原本要计算两次的平方的n进制数,变为一次,我有点懒ac了就不想改了
int main() {
cin >> n;
for (int i = 1; i <= 300; i++) {//从0到300,我们将数字的平方先转化为b进制的数进行判断是否为回文数
if (panduan(i * i) == 0) {
njinghzhi(i);
cout << " ";
njinghzhi(i * i);
cout << endl;
}
}
return 0;//一开始忘写了
}
判断平方后回文数的程序
该程序用于找出11到300之间所有整数的平方,在给定进制B下表示为回文数的结果。通过将数字转换为B进制并判断回文性质,满足条件的数字按升序输出。算法包括数字转换和回文判断两个主要步骤。
2万+

被折叠的 条评论
为什么被折叠?



