记录编号 365146 评测结果 AAAAAAAA
题目名称 回文平方数 最终得分 100
用户昵称 GravatarHeHe 是否通过 通过
代码语言 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();
}