题目大意:
在[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); }