USACO Palindromic Squares属于回文数判断与进制转换问题。在Windows下有一个itoa函数,可以方便的将10进制数转换成2到36进制字符串,但是很遗憾GCC里面没有这个函数。于是就自己来写一个通用的转换函数吧。同样是通过一个map数组,可以方便的实现进制的转换,具体请参考下面代码中的num2str函数。
/*
ID:stackex1
LANG:C
PROG:palsquare
*/
#include <stdio.h>
#include <string.h>
void num2str(int num, char *s, int base)
{
char map[] = {"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"};
char dst[64];
int i = 0, n;
while(num)
{
dst[i++] = map[num % base];
num /= base;
}
dst[i] = '\0';
n = i;
for(i = n - 1; i >= 0; --i)
{
s[n -1 - i] = dst[i];
}
s[n] = '\0';
}
int isPal(char *s)
{
int i, n;
n = strlen(s);
for(i = 0; i <= n/2; ++i)
{
if(s[i] != s[n - i - 1])break;
}
if(i <= n/2)return 0;
return 1;
}
int main(int argc, char **argv)
{
FILE *fin = fopen("palsquare.in", "r");
FILE *fout = fopen("palsquare.out", "w");
int base, i, n = 300;
char si[32], sii[32];
fscanf(fin, "%d", &base);
for(i = 1; i <= n; ++i)
{
num2str(i*i, sii, base);
if(isPal(sii))
{
num2str(i, si, base);
fprintf(fout, "%s %s\n", si, sii);
}
}
fclose(fin);
fclose(fout);
return 0;
}
原创文章,转载请注明:
本文出自程序人生 >> USACO Palindromic Squares
作者:代码疯子
您可能对下面的文章也感兴趣:
本文介绍了一段用于解决USACO回文平方数问题的代码,包括十进制到2-36进制的转换函数、回文数判断函数,以及如何在给定进制下寻找回文平方数。
309

被折叠的 条评论
为什么被折叠?



