1. 程式人生 > >迴文平方數

迴文平方數

給定一個進位制B(2<=B<=20,由十進位制表示),輸出所有的大於等於1小於等於300(十進位制下)且它的平方用B進製表示時是迴文數的數。用’A’,’B’……表示10,11等等
輸入樣例
10
輸出樣例
1 1
2 4
3 9
11 121
22 484
26 676
101 10201
111 12321
121 14641
202 40804
212 44944
264 69696

  #include <bits/stdc++.h>
  using namespace std;
  long long t=0;
  long long tt,g,n,y,z=1e9,ans,a[2001],b[2001];
  char c[22]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L'};//初始化
  int main()
  {	
  	cin>>n;
  	long long i,y;
  	while (t<=300)
  	{
    	string s,ss;
  		t++;//記錄原數
  		tt=t*t;//平方數
  		y=0;
  		i=2000;
  		while (tt>0)
  		{
  			a[i]=tt%n;
			tt/=n;
			i--;
  		}//將tt轉化為進位制
  		z=i+1;
  		for (i=z;i<=2000;i++)
		  {
		  	s+=c[a[i]];
		  }	
	    for ( i=s.size()-1;i>=0;i--)
	    {
	    	ss+=s[i];
	    }
	    if (s==ss)//如果是迴文數
	    {
	    	tt=t;//防止影響原變數
	      i=2000;
	      while (tt>0)
  		{
  			a[i]=tt%n;
			tt/=n;
			i--;
  		}//將t轉化為n進位制
  		z=i+1;
  		ss="";
  		for (i=z;i<=2000;i++)
		  {
		  	ss+=c[a[i]];
		  }
	      cout<<ss<<" "<<s<<endl;
  	}
	    }
	      
  }

需要耐心,慢慢做,你就能成功!