USACO 1.3.4_palsquare
阿新 • • 發佈:2018-12-12
/*
ID: cjn77881
LANG: C++
TASK: palsquare
*/
#include <stdio.h>
#include <string.h>
typedef struct RubyArray RubyArray;
struct RubyArray{
char a[20];
};
int N;
RubyArray s;
RubyArray makeString(int x,int N){
RubyArray s;
if (x==0){
strcpy(s.a,""); //strcpy可以無視字串之間定義時的位數差
return s;
}
s = makeString(x/N,N); //迭代思想,簡化程式碼
int len = strlen(s.a); //不寫這句會有亂碼
s.a[len] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[x%N]; //這種寫法很好用,快速提取某進位制下的值
s.a[len+1]='\0'; //表明字串到此為止
return s;
}
bool ispal(char *s){
char *t; //s為字串首位元素的地址,s+strlen(s)-1為該串末位地址,*s 與 *t 為串中該地址中儲存元素內容,strlen(s)為s地址開頭的字串長度。
for (t = s+strlen(s)-1;s<t;s++,t--) if (*s != *t) return false;
return true;
}
int main(){
FILE *fin = fopen("palsquare.in","r");
FILE *fout = fopen("palsquare.out","w");
fscanf(fin,"%d",&N);
for (int i=1;i<=300;i++){
s = makeString(i*i,N);
if (ispal(s.a)) fprintf(fout,"%s %s\n" ,makeString(i,N).a,s.a);
}
return 0;
}