给出进制N(2<=N<=20),求1至300范围内其平方表示成N进制后为回文数的所有数字,输出这些数字和对应的平方回文。
问题很简单,直接对1至300范围内的每个数平方,然后用除k取余法求其k进制表示,判断是否为回文,是的话则输入该数及其平方。
/* ID: whutzha1 PROG: palsquare LANG: C++ */ //#include<iostream> #include<fstream> using namespace std; ifstream cin("palsquare.in"); ofstream cout("palsquare.out"); int main() { int b; cin>>b; int i,j1,j2,k; int arr1[20]; int arr2[20]; for (i=1;i<=300;i++) { k=i*i; j1=-1; while(k) { j1++; arr1[j1]=k%b; k=k/b; } bool flag=true; for (k=0;k<=j1/2;k++) { if (arr1[k]!=arr1[j1-k]) { flag=false; break; } } if (flag) { k=i; j2=-1; while(k) { j2++; arr2[j2]=k%b; k=k/b; } for(k=j2;k>=0;k--) { if(arr2[k]<10) cout<<arr2[k]; else cout<<(char)(arr2[k]+55); } cout<<" "; for(k=0;k<=j1;k++) { if(arr1[k]<10) cout<<arr1[k]; else cout<<(char)(arr1[k]+55); } cout<<endl; } } return 0; }