题目描述
回文是向后读取相同向前的数字。 数字12321是典型的回文。
给定基数B(2 <= B <= 20基10),打印所有整数N(1 <= N <= 300基10),使得当在基数B中表示时,N的平方值为回文; 也打印该回音广场的价值。 使用字母'A','B'等代表数字10,11等等。
打印基数B和数字二。
程序名称:palsquare
输入格式
单行B,基数(在10中指定)。
输入(file palsquare.in)
10
输出格式
具有在B中表示的两个整数的行。第一个整数是其正方形是回文的数字; 第二个整数是平方本身。 注意两个整数都在基本B上!
输出(file palsquare.out)
1 1
2 4
3 9
11 121
22 484
26 676
101 10201
111 12321
121 14641
202 40804
212 44944
264 69696
扫描二维码关注公众号,回复:
11960053 查看本文章
解题思路
本题主要思路是,把1~300的每个数的平方算出来,然后计算出它m进制时的表示方式其为字符串的形式,若它为回文数则输出这个数的平方m进制的表示方式和这个数m进制的表达形式,因为要多次计算一个数的m进制表示形式,因此我们把它设置成一个函数。
解题代码
/*
ID: 15189822
PROG: palsquare
LANG: C++
*/
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
ofstream fout("palsquare.out");
ifstream fin("palsquare.in");
string jinzhi(int n,int x){
string res="";
char c;
while(n>0){
if(n%x>9)
c=55+n%x;
else
c='0'+n%x;
res=c+res;
n/=x;
}
return res;
}
bool huiwen(string str){
int l=(int)str.length();
for(int i=0;i<l/2;i++){
if(str[i]!=str[l-i-1])
return false;
}
return true;
}
int main(){
int m;
fin>>m;
for(int i=1;i<=300;i++){
if(huiwen(jinzhi(i*i,m)))
fout<<jinzhi(i,m)<<" "<<jinzhi(i*i,m)<<endl;
}
return 0;
}