1.2 Palindromic Squares

       给出进制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;
}

你可能感兴趣的:(USACO,Palindromic,Squares)