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
作者:代码疯子
您可能对下面的文章也感兴趣: