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>
int N,B,len;
int a[20];
void turn(int num){
int i=0,t;
len=0;
if(B>=2&&B<10){
while(num>0){
a[i]=num%B+'0';
i++;
len++;
num/=B;
}
}else if( B >= 10 && B <= 20 ){
while( num > 0 ){
t = num % B;
if( t < 10 )
a[i] = t + '0';
else if( t == 10 )
a[i] = 'A';
else if( t == 11 )
a[i] = 'B';
else if( t == 12 )
a[i] = 'C';
else if( t == 13 )
a[i] = 'D';
else if( t == 14 )
a[i] = 'E';
else if( t == 15 )
a[i] = 'F';
else if( t == 16 )
a[i] = 'G';
else if( t == 17 )
a[i] = 'H';
else if( t == 18 )
a[i] = 'I';
else if( t == 19 )
a[i] = 'J';
else if(t==20){
a[i]='K';
}
num/=B;
i++;
len++;
}
}
}
int isHuiWen(){
int i,j;
turn(N);
i=0;
j=len-1;
while(i<j){
if(a[i]!=a[j]){
return 0;
}
i++;
j--;
}
return 1;
}
void show(int m){
int i;
turn(m);
for(i=len-1;i>=0;i--){
printf("%c",a[i]);
}
}
int main(){
scanf("%d",&B);
for(int i=1;i<=300;i++){
N=i*i;
if(isHuiWen()==1){
show(i);
printf(" ");
show(N);
printf("\n");
}
}
return 0;
}
来源:CSDN
作者:InnerSky900
链接:https://blog.csdn.net/weixin_39910081/article/details/104563665