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 ishui(int m,int n){//判断是否为回文数
int i,j,a[1000];
for(i=0;n!=0;i++){
a[i]=n%m;
n=n/m;
}
for( j=0;j<i/2;j++)
if(a[j]!=a[i-j-1])
return 0;
return 1;
}
void print(int a,int b){//输出这个数
int i,p[1000];
for(i=0;b!=0;i++){
p[i]=b%a;
b=b/a;
}
for(i=i-1;i>=0;i--)
if(p[i]>9)
printf("%c",p[i]-10+'A');//ASCII值对应的字母用于十以上进制的数
else printf("%d",p[i]);
}
int main(){
int i,n,square;
scanf("%d",&n);
for(i=1;i<=300;i++){
square=i*i;
if(ishui(n,square)){
print(n,i);
printf(" ");
print(n,square);
printf("\n");
}
}
return 0;
}