IT民工
加油!

这道题是要我们判断在B进制下,1<= n <= 300, n^2是否为回文数,如果是回文数的话就输出

该数及其平方在B进制下的形式。因为进制 2 <= B <= 20,所以先定义一个一个进制数组

         const char B[21] = "0123456789ABCDEFGHIJ";

 然后输入进制n,1->300求出其平方在n进制下的形式,判断是否为回文数,是的话再将数字

在n进制下的形式求出。

/*
ID:yucept21
LANG:C++
TASK:palsquare
*/

#include<cstdio>
#include<cstring>
#include<cstdlib>

const int N = 15;
const char B[21] = "0123456789ABCDEFGHIJ";
char a[N], b[N];
int n;

int main()
{

freopen( "palsquare.in", "r", stdin);
freopen( "palsquare.out", "w", stdout);

scanf( "%d", &n);
for( int i = 1; i <= 300; i ++)
{
memset( a, 0, sizeof a);
memset( b, 0, sizeof b);
int tt = i * i;
int top = 0;
while( tt != 0)
{
a[top ++] = B[tt % n];
tt /= n;
}
int len1 = top;
bool mark = true;
for( int j = 0; j <= len1 / 2; j ++)
if( a[j] != a[len1 - 1 - j]) {
mark = false;
break;
}
if( mark || len1 == 1)
{
top = 0;
int k = i;
while( k != 0)
{
b[top ++] = B[k % n];
k /= n;
}
int len2 = top;
for( int c = len2 - 1; c >= 0; c --)
printf( "%c", b[c]);
printf( " %s\n", a);
}
}
return 0;
}

 

 

posted on 2012-01-16 17:28  找回失去的  阅读(128)  评论(0编辑  收藏  举报