對於1~300的每個n,計算它的平方數m,將其化爲b進制,存入數組a[],而後分別檢測是否迴文數,若是是,將n轉化爲b進制,存入數組c[],打印對應的c[],a[]便可。ios
/* ID:jzzlee1 PROG:palsquare LANG:C++ */ #include <fstream> #include<iostream> #include<cstring> using namespace std; ifstream fin("palsquare.in"); ofstream fout("palsquare.out"); void change(int a[],int b,int n) { int i=0; while(n) { a[i++]=n%b; n/=b; } a[i]=30; } char ch[12]={'A','B','C','D','E','F','G','H','I','J',0,0}; void print(int a[],int sz,int b) { int i; for(i=sz-1;i>=0;i--) { if(a[i]>9) { fout<<ch[a[i]-10]; } else fout<<a[i]; } } int main() { int i;int b,n;int a[20],c[20]; fin>>b; for(n=1;n<=300;n++) { int m=n*n; //m化爲b進制,放進數組a[]中 change(a,b,m); int sz; for(sz=0;a[sz]!=30;sz++); //判斷是否是迴文數 bool flag=1; for(i=0;flag&&i<=sz/2;i++) { if(a[sz-1-i]!=a[i]) flag=0; } //若是是 if(flag) { //n化爲b進制,放進數組c[]中 change(c,b,n); int len; for(len=0;c[len]!=30;len++); //打印n在b進制下的數值,即c[]; print(c,len,b); fout<<" "; //打印m在b進制下的數值,即a[] print(a,sz,b); fout<<endl; } } return 0; }