回文平方(3月24日)

判断平方后回文数的程序
该程序用于找出11到300之间所有整数的平方,在给定进制B下表示为回文数的结果。通过将数字转换为B进制并判断回文性质,满足条件的数字按升序输出。算法包括数字转换和回文判断两个主要步骤。

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

例如数字
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;//一开始忘写了
}

一开始将数从1到300将数字和数字的平方转换为n进制 的数存入数组中,判断平方的n进制数是否为回文数,是则输出,否则反之。想法是比较简单的但是对于代码的实现我的想法是进行了改变的。

原本的的想法是将转换后的数存放在字符串中的,再将字符串倒转,于原字符串进行对比,相同则为回文数。但是写完代码报错,我还看不出来,只能换方法了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冬樱春雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值