52 回文平方数

蹲街弑〆低调 提交于 2020-02-28 22:09:54

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;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!