题目大意:

在[1,300]范围内,找出符合条件“其平方在b进制下为回文数”的所有整数。

思路:

简单模拟,思路见注释。

代码:

/*
ID: lujunda1
LANG: C++
PROG: palsquare
*/
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdio>
#include<stdlib.h>
using namespace std;
//将整数n转换为b进制并存入字符数组num[]中 
void trans(char num[],int n,int b)
{
	for(int i=0;;i++)
	{
		num[i]=n%b>9?n%b-10+'A':num[i]=n%b+'0';
		n/=b;
		if(n==0)
		{
			num[i+1]='\0';
			break;
		}
	}
	for(int i=0;i<strlen(num)/2;i++)
		swap(num[i],num[strlen(num)-1-i]);
}
//判断n*n是否是回文数 
void func(int n,int b)
{
	char num[100],temp[100];
	trans(num,n*n,b);
	for(int i=0;i<=strlen(num)/2;i++)
		if(num[i]!=num[strlen(num)-1-i])
			return;
	trans(temp,n,b);
	printf("%s %s\n",temp,num);
}
int main()
{
	freopen("palsquare.in","r",stdin);
	freopen("palsquare.out","w",stdout);
	int b;
	scanf("%d",&b);
	for(int i=1;i<=300;i++)
		func(i,b);
}