记录编号 |
365146 |
评测结果 |
AAAAAAAA |
题目名称 |
回文平方数 |
最终得分 |
100 |
用户昵称 |
HeHe |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.351 s |
提交时间 |
2017-01-19 19:19:33 |
内存使用 |
0.79 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 123456
char num[20]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J'};
class Num{
private:
int s[MAXN];
int len,jz;
public:
Num()
{
memset(s,0,sizeof(s));
len=1,jz=10;
}
void clear()
{
memset(s,0,sizeof(s));
len=1,jz=10;
}
Num operator*(const Num&a)
{
Num b;
b.clear();
b.len=a.len+len;
b.jz=jz;
for(int i(0);i<len;i++)
for(int j(0);j<a.len;j++)
{
b.s[i+j]+=s[i]*a.s[j];
b.s[i+j+1]+=b.s[i+j]/jz;
b.s[i+j]%=jz;
}
if(!b.s[b.len-1])b.len--;
return b;
}
Num operator++()
{
s[0]++;
int i(0);
while(s[i]>=jz)
s[i]-=jz,i++,s[i]+=1;
i++;
if(len<i)len=i;
return *this;
}
bool pan()
{
int i(0),j(len-1);
while(i<j)
{
if(s[i]!=s[j])return 0;
i++,j--;
}
return 1;
}
void work()
{
int k;
Num tmp;
scanf("%d",&k);
tmp.jz=jz=k;
s[0]=1;
for(int i(1);i<=300;i++)
{
tmp=(*this)*(*this);
if(tmp.pan())
{
print();
putchar(' ');
tmp.print();
putchar('\n');
}
++(*this);
}
}
void print()
{
for(int i(len-1);i>=0;i--)
putchar(num[s[i]]);
}
}ans;
int main()
{
freopen("palsquare.in","r",stdin);
freopen("palsquare.out","w",stdout);
ans.work();
}