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
作者:代碼瘋子
您可能對下面的文章也感興趣: