USACO Palindromic Squares

来源:互联网 发布:超级大乐透数学算法 编辑:程序博客网 时间:2024/05/29 12:47

【题意】找出1到300的数中其平方在b进制下是回文的数,并打印这些数及其平方在b进制下的表示

【分析】

数比较小,直接搜索再验证,验证就写个进制转换。

又作死了,审题时没看见说枚举的数也要用b进制,弄得直接WA了2次。

【代码】

/*

{

ID:y2007031

PROG:palsquare

LANG:C++

}

*/


#include <cstdio>

#include <cstring>

#include <cstdlib>


using namespace std;


const char c[21]="0123456789ABCDEFGHIJ";//{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J'};


int base,change[30],swap[30];


void get(int k)

{

change[0]=0;

for (int i=k*k;i;i/=base) change[++change[0]]=i%base;

for (int i=1;i<=change[0];i++) if (change[i]^change[change[0]+1-i]) return;

swap[0]=0;

for (int i=k;i;i/=base) swap[++swap[0]]=i%base;

for (int i=swap[0];i;i--) printf("%c",c[swap[i]]);

printf(" ");

for (int i=change[0];i;i--) printf("%c",c[change[i]]);

printf("\n");

}


int main(void)

{

freopen("palsquare.in","r",stdin);

freopen("palsquare.out","w",stdout);

scanf("%d",&base);

for (int i=1;i<=300;i++) get(i);

return 0;

}

【总结】

①字符串都可以这样存:const char s[8]="12345678",不用这样存:const char s[8]={'1','2','3','4','5','6','7','8'}

②进制转换的相关内容


0 0
原创粉丝点击