52 回文平方数
作者: xxx时间限制: 1S章节: 一维数组
问题描述 :
回文数是指从左向右念和从右向左念都一样的数。如12321就是一个典型的回文数。 给定一个进制B(2=<B<=20进制),输出所有的大于等于1小于等于300且该数的平方用B进制表示时是回文数的数(该数本身不要求是回文数)。
输入说明 :
共一行,一个单独的整数B(B用十进制表示,比如18)。
输出说明 :
每行两个数字,第二个数是第一个数的平方,且第二个数是回文数。
注意:输出时,这两个数都应该以B进制表示。
在输出时,数字10到20分别以A到K代替。
输入范例 :
20
输出范例 :
1 1
2 4
3 9
4 G
11 121
22 484
25 515
33 9I9
DD 9669
#include <stdio.h>
#include <stdlib.h>
int is_huiwen(char a[],int x)
{
int i,flag=1;
for(i=0;i<=x/2;i++)
{
if(a[i]!=a[x-i-1])
{
flag=0;
break;
}
}
return flag;
}
int change(int num,char *p,int B)
{
char ch;
int i,count=0;
while(num>0)
{
i=num%B;
if(i>=10)
ch=i+55;
else
ch=i+48;
*p=ch;
num/=B;
p++;
count++;
}
return count;
}
int main()
{
int change(int num,char *p,int B);
int is_huiwen(char a[],int x);
int B,i,j,k,count1,count2;
int num;
char arr[20],arr2[20];
char *p=arr,*q=arr2;
scanf("%d",&B);
for(i=1;i<=300;i++)
{
num=i*i;
count1=change(num,p,B);//记录数组长度
count2=change(i,q,B);
if(is_huiwen(arr,count1))
{
for(j=count2-1;j>=0;j--)
printf("%c",arr2[j]);
printf(" ");
for(k=count1-1;k>=0;k--)
printf("%c",arr[k]);
printf("\n");
}
}
return 0;
}
好像搞得太复杂了,我吐了。